admin 管理员组

文章数量: 887021


2024年2月7日发(作者:radio station翻译)

shell set 参数

在Shell脚本中,`set` 是一个内建命令,用于设置或更改shell的行为。它常与各种选项一起使用,以修改脚本的执行方式。

以下是一些常见的 `set` 选项和它们的用途:

1. -x - 打印出执行的每一个命令。

```bash

set -x

echo "Hello, World!"

set +x

```

2. -v - 打印出每一个输入行的内容。

```bash

set -v

echo "Hello, World!"

set +v

```

3. -e - 一旦有命令返回非零退出状态,就立即退出脚本。

```bash

set -e

! command_that_fails 这将导致脚本退出

set +e

```

4. -u - 当尝试使用未设置的变量时,脚本将退出。

```bash

set -u

echo $UNSET_VARIABLE 这将导致脚本退出

set +u

```

5. -o pipefail - 在管道命令中,只有当所有的命令都成功时,整个管道命令才返回成功。否则,它会返回第一个失败的命令的退出状态。

6. -n - 只读取并检查命令,而不执行它们。这主要用于检查脚本中的语法错误。

7. -o history (或 `+o history`) - 允许或禁止命令历史记录。默认情况下,bash 保存命令历史记录。

8. -o noglob - 禁用通配符扩展。例如,`echo .txt` 将不会展开为当前目录下的所有 .txt 文件名。

9. -o notify (或在 `PS2` 中使用 `c` 或 `C`) - 当在交互式shell中时,这将在每条命令之前打印一个提示符。这有助于看到正在执行的命令。

10. -o errtrace - 这将使得所有未捕获的错误信号被传播到 `ERR` trap。这对于确保错误被处理很有用。

11. -o functrace - 这将使得所有函数调用被传播到 `FUNC` trap。这对于调试函数很有用。

12. -o nounset - 当尝试使用未设置的变量时,这将引发一个错误。这对于防止未定义的变量引起的问题很有用。

13. -o xtrace (或简写为 `-x`) - 这将在执行每个命令之前打印它,类似于

`echo`。这对于调试脚本很有用。

14. -i - 这将使得脚本在交互模式下运行,允许你从键盘输入命令。

15. -c - 允许你直接在 `set` 命令后面输入命令序列。例如:`set -e;

command1; command2;` 这将使 `command1` 和 `command2` 在错误时退出脚本。

16. -a - 这将使得所有变量都被打印出来。这对于查看所有已设置的变量很有用。

17. -F - 在函数退出时打印函数名和退出状态。这对于调试很有用。

18. -r - 禁用所有已设置的陷阱(traps)。这对于确保脚本不会意外地捕获和处理某些信号很有用。

19. -h - 当设置了此选项,shell 将尝试使用 `getopts` 来解析位置参数,这有助于处理带有选项的命令行参数。例如:`./ -a --file `。

20. -P - 启用解析点(解析点是在一个扩展或替换完成之前的位置)。这对于解析更复杂的表达式很有用。

21. -T - 在读取任何输入之前立即退出脚本,即使没有错误发生。这对于测试脚本的边界条件很有用。

22. -C - 禁用文件名生成(也就是通配符扩展)。这对于确保不会意外地展开文件名很有用。例如:`echo .txt` 将不会展开为文件名列表,而是直接输出 "."。

23. -k (或 `+k`) - 允许或禁止在位置参数上设置本地变量。当禁用了此选项(默认),你只能在位置参数之后设置变量(例如:`./ arg var=value`)。当启用了此选项,你可以在任何位置设置变量(例如:`./ arg var=value

arg2`)。


本文标签: 命令 脚本 设置 变量 退出