一些 Bash 选项是众所周知并且经常使用的。 例如,很多人在脚本的开头写
设置-o xtrace
用于调试,
设置-o errexit
错误退出或
设置-o errunset
如果未设置被调用的变量则退出。
但还有很多其他选择。 有时,它们在法力中的描述过于混乱,因此我在这里收集了一些最有用的内容,并附有解释。
注意:Mac 可能有较旧版本的 bash(3.x 而不是 4.x),其中并非所有这些选项都可用。 在这种情况下,请参阅
set
или shopt
?
有两种方法可以设置 bash 选项:从脚本或从命令行。 您可以使用内置命令 set
и shopt
。 两者都改变了 shell 的行为,做很多相同的事情(使用不同的参数),但它们的不同之处 set
是从其他 shell 的参数继承或借用的,而参数 shopt
在 bash 中创建。
如果您想查看当前选项,请运行:
$ set -o
$ shopt
要激活该选项 set
使用长语法或短语法:
$ set -o errunset
$ set -e
效果是一样的。
要禁用该选项,您需要输入加号而不是减号:
$ set +e
很长一段时间我都记不住这个语法,因为逻辑似乎是错误的(减号启用该选项,加号禁用它)。
В shopt
(更符合逻辑)标志用于启用和禁用选项 -s
(设定)和 -u
(未设置):
$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off
更改目录
有几个选项可以帮助您使用目录。
1.CD拼写
通过此设置,bash 将开始识别拼写错误,并将您带到名称拼写错误的文件夹。
$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..
我已经使用这个选项很多年了,很少(也许每年一次)它会做出一个非常奇怪的决定。 但在其他日子 cdspell
每天都可以节省时间。
2. 自动光盘
如果您不愿意接受多次输入的低效率 cd
,那么您可以设置此选项,如果 X 命令不存在,则移动到 X 文件夹。
$ shopt -s autocd
$ abcdefg
$ cd ..
与自动完成功能相结合,您可以在文件夹之间快速跳转:
$ ./abc[TAB][RETURN]
cd -- ./abcdefg
只是不要命名文件夹 rm -rf *
(是的,顺便说一句,这是可能的)。
3.dir展开
这是一个很酷的选项,可以通过按 Tab 来扩展环境变量:
$ shopt -s direxpand
$ ./[TAB] # заменяется на...
$ /full/path/to/current_working_folder
$ ~/[TAB] # заменяется на...
$ /full/path/to/home/folder
$ $HOME/[TAB] # заменяется на...
$ /full/path/to/home/folder
干净的输出
4.检查工作
如果仍有作业在后台运行,此选项将停止注销会话。
显示未完成任务的列表,而不是退出。 如果仍想退出,则重新进入 exit
.
$ shopt -s checkjobs
$ echo $$
68125 # <= ID процесса для оболочки
$ sleep 999 &
$ exit
There are running jobs.
[1]+ Running sleep 999 &
$ echo $$
68125 # <= ID процесса для оболочки тот же
$ exit
There are running jobs.
[1]+ Running sleep 999 &
$ exit
$ echo $$
$ 59316 # <= на этот раз ID процесса изменился
替代超能力
5.环球星
这个选项给你替代超能力! 如果您输入:
$ shopt -s globstar
$ ls **
那么 shell 将递归地显示所有目录和子目录。
与...结合使用 direxpand
您可以快速查看层次结构中较低的所有内容:
$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n)
6.extglob
此选项启用与正则表达式更常见关联的功能。 有时这非常有用:
$ shopt -s extglob
$ touch afile bfile cfile
$ ls
afile bfile cfile
$ ls ?(a*|b*)
afile bfile
$ ls !(a*|b*)
cfile
这里,模式被放置在括号中并由竖线分隔。 以下是可用的运算符:
? = 匹配零次或一次出现的给定模式! = 显示与给定模式不匹配的所有内容 * = 出现零次或多次 + = 出现一次或多次 @ = 恰好出现一次
意外保障
7. 历史验证
刚开始使用缩写历史记录中的快速启动命令可能会有点害怕 !!
и !$
.
选项 histverify
让您在实际运行之前首先了解 Bash 如何解释该命令:
$ shopt -s histverify
$ echo !$ # <= По нажатию Enter команда не запускается
$ echo histverify # <= Она сначала демонстрируется на экране,
histverify # <= а потом запускается
8. 诺克洛伯
再次强调,为了防止意外发生,即使用重定向操作符覆盖已经存在的文件(>
)。 如果您没有备份,这可能会是一场灾难。
选项 set -С
禁止此类覆盖。 如有必要,您可以使用运算符绕过保护 >|
:
$ touch afile
$ set -C
$ echo something > afile
-bash: afile: cannot overwrite existing file
$ echo something >| afile
$
来源: habr.com