Linux环境变量,打开的 shell 选项 himBHs 和 hBc
前言全局说明
Linux环境变量 himBHs 和 hBc
一、说明
$- 记录的是当前配置打开的 shell 选项,而 himBH 是其默认值。
二、查看环境变量
2.1 本地执行
echo $-
2.1 查看远程环境变量
ssh qt@127.0.0.1 'echo $-'
127.0.0.1实际是本机回环,但是假设是远程机器的IP,效果是一样的
三、选项说明
h - hashall
i - interactive-comments
m - monitor
B - braceexpand
H - history
s - 暂未知
c - 暂未知
查看来确认打开状态
set -o | grep -w on
3.1、h - hashall
bash 的 hash 功能,可以实现让某些 command 和 具体路径 绑定在一起。
## 绑定 date 到 /tmp/fakedate 路径
$ hash -p /tmp/fakedate date
## 列出包含 fakedate 绑定关系
$ hash -l | grep fakedate
builtin hash -p /tmp/fakedate date
## 执行绑定后的 date
$ date
-bash: /tmp/fakedate: No such file or directory
## 取消绑定,date 就是默认的输出日期了
$ set +h
$ date
Sun Jan 19 15:43:18 CST 2020
## 绑定 路径和date
$ set -h
$ date
-bash: /tmp/fakedate: No such file or directory
##
$ hash -d date
$ date
Sun Jan 19 15:43:53 CST 2020
$ 开头的是用户输入的命令
hash表概述
在 Linux 系统第一次执行外部命令时,hash 缓存表是空的;
这时,系统会先从 PATH 路径下寻找命令,找到后会将路径加入到 Hash 缓存中;
当再次执行此命令时,会直接从 hash 表的路径下执行;
如果存在则直接执行,如果不存在将继续从 PATH 下的路径查找;
因此,hash 表可以提高命令的调用速率。
完整说明:https://blog.csdn.net/weixin_42599558/article/details/116871719
3.2、i - interactive-comments
配置在交互 shell 模式下,是否允许注释。
设置值不能用 set -i ,会报错
## 取消设置,不允许注释
$ set +o interactive-comments
$ echo $-
hmBH
## 显示一个注释语句,被当成命令
$ #testcomment
-bash: #testcomment: command not found
## 设置,允许注释
$ set -o interactive-comments
$ echo $-
himBH
$ set -o | grep -w on | grep interactive-comments
interactive-comments on
## 显示一个注释语句,不被执行,什么也不显示
$ #testcomment
3.3、m - monitor mode
打开监控模式,配置是否打开控制 Job control 功能。
Job control 是什么? 即可以控制进程的停止、继续,后台或者前台执行等。
开启 job control 后,如果执行了一个比较耗时的命令,可以按下 CTRL+Z 让它在后台运行:
$ sleep 50
^Z
[1]+ Stopped sleep 50
然后, 可以用 fg 命令将后台运行的任务恢复到前台执行:
$ fg
sleep 50
^C
如果关闭这个选项,就会失去控制 Job 的能力:
$ set +m
$ echo $-
hiBH
$ sleep 50
^Z
^Z
^C
$ fg
-bash: fg: no job control
3.4、B - braceexpand
关于括号使用的flag,打开后可以快捷地实现某些效果
快捷输出多个字符串:
$ echo testbraceexpand{1..10}
testbraceexpand1 testbraceexpand2 testbraceexpand3 testbraceexpand4 testbraceexpand5 testbraceexpand6 testbraceexpand7 testbraceexpand8 testbraceexpand9 testbraceexpand10
$ set +B
$ echo $-
himH
$ echo testbraceexpand{1..10}
testbraceexpand{1..10}
快捷备份:
$ echo $-
himH
$ cp /tmp/myfile{,.bak}
cp: missing destination file operand after '/tmp/myfile{,.bak}'
Try 'cp --help' for more information.
$ set -B
$ echo $-
himBH
$ cp /tmp/myfile{,.bak}
$ ls -l /tmp/myfile*
-rw-r--r-- 1 xxx users 3 Jan 19 16:43 myfile
-rw-r--r-- 1 xxx users 3 Jan 19 16:43 myfile.bak
3.5、H - history
是否允許用 “感叹号 !+ history number ” 来执行历史命令
!! : 返回并执行最近的一个历史命令
!n : 返回并执行第 n 个历史命令
$ echo $-
himBH
$ uptime
16:51:00 up 1137 days, 23:01, 1 user, load average: 0.29, 0.38, 0.31
$ !!
uptime
16:51:05 up 1137 days, 23:02, 1 user, load average: 0.35, 0.39, 0.31
$ history | grep 59
59 01/19/20 16:47 echo $-
$ !59
echo $-
himBH
如果关掉 histexpand ,那么 !n 则无法顺利执行了。
$ set +H
$ echo $-
himB
$ !59
-bash: !59: command not found
$ !!
-bash: !!: command not found
由于 histexpand 打开的时候,“ !” 带特殊含义;
因此 histexpand 打开状态下,“ !” 不能出现在双引号中,
否则会报错 -bash: !": event not found ,具体可戳 《 Linux -bash: !": event not found 》 了解。
3.6、s - 暂未知
3.7、c - 暂未知
四、其他知识
4.1 set 命令
查看: set -o
设置: set -N 或者 set -o Nx
取消: set +N
4.2 -/+ 作用
-:设置值
+:取消设置值
免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负。
参考、来源:
https://blog.csdn.net/weixin_44648216/article/details/104062992
https://blog.csdn.net/weixin_44648216/article/details/104059516
https://blog.csdn.net/Jerry00713/article/details/134160949
https://blog.csdn.net/Jerry00713/article/details/134161018?spm=1001.2014.3001.5502