shell选项

来源:互联网 发布:天干地支年月计算法 编辑:程序博客网 时间:2024/05/20 21:20

设置的shell选项



$-记录着当前设置的shell选项,himBH是默认值


command

echo $-

himBH


set -x #这个可以打开 shell 的调试开关

echo $-

himxBH


himBH 上这几个默认选项对 Shell的影响


1. H - history expand


我们知道 Shell 会把我们执行的命令记录下来,可以通过 history 命令查看,每一行是序号 + 执行的命令。在 shell 退出时,会将这些信息保存到~/.bash_history 文件中,当然在启动时也会从该文件中加载,不信删除这个文件再打开一个终端试试。


history expand 就是展开历史列表中的命令,可以通过!感叹号来完成,例如"!!"返回上最近的一个历史命令,"!n"返回第 n 个历史命令,等等。


备注:在命令行下,不要在双引号号里面用!,这会让 Shell "误以为" 你要执行历史展开


$ echo "hello world!"

-bash: !": event not found



解决方法有两种:使用单引号或者关闭历史展开功能(在脚本里面默认是关闭的):


$ echo 'hello, world!'

hello, world!


$ set +H #关闭开关


$ echo "hello, world!"

hello, world!



2.Brace expansion

$ cp /your/path/to/file{,.bak}

很多时候大家需要备份某个文件时,非常头疼的一点就是要重复输入长长地路径,利用 Brace expansion 就可以轻松搞定。


set +B #关闭这个功能


3.m - monitor mode


字面意思是说打开监控模式,Bash 手册上后面还有一句话"Job control is enabled",Job control 是什么?就是说可以控制进程的停止、继续,后台或者前台执行等。


正常情况下,在交互式模式下,该选项默认是打开的,所以再执行一个比较耗时的命令时,你可以按下CTRL+Z 让它在后台运行,然后可以用 fg 命令将后台运行的任务恢复到前台执行:


 

$ sleep 10

+ sleep 10

^Z

[1]+  Stopped                 sleep 10



$ fg

+ fg

sleep 10

如果关闭这个选项,你就失去了控制 Job 的能力:


4.h - hashall

Shell 会将命令所在的路径记录下来,避免每次都要查询。


我们要验证下这个猜测,首先在/usr/bin 下创建任意一个可执行的文件:


[kodango@mac] ~ 

$ echo "test hashall" | sudo tee /usr/bin/kodango && sudo chmod +x /usr/bin/kodango


[kodango@mac] ~ 

$ kodango

test hashall


[kodango@mac] ~ 

$ sudo mv /usr/bin/kodango /usr/local/bin/kodango


[kodango@mac] ~ 

$ kodango

-bash: /usr/bin/kodango: No such file or directory

好吧,果不其然,“缓存”失效了。接下来,我们关闭这个选项:


[kodango@mac] ~ 

$ set +m


[kodango@mac] ~ 

$ kodango

test hashall


[kodango@mac] ~ 

$ which kodango

/usr/local/bin//kodango

现在工作正常了,不过谁会经常没事瞎移动命令呢?所以这个选项默认都是打开的。


最后,你也可以通过set -o命令来查看当前 shell 的选项配置。



0 0
原创粉丝点击