如果我set -x 在 shell 中运行然后运行脚本,则设置的选项set -x在脚本中不起作用。
我想知道是否所有的 shell 选项都不是由脚本继承的?
我没有发现 bash 手册中提到了这一点。我发现唯一相关的是“除非另有说明,否则这些值是从 shell 继承的。” 所以我猜shell选项是继承的。我在手册中遗漏了它吗?
我已经阅读了一个相关的问题,该问题询问如何让脚本继承 shell 选项。我想知道是否以及为什么而不是如何。
谢谢。
当要执行除内置函数或 shell 函数之外的简单命令时,它会在包含以下内容的单独执行环境中调用。除非另有说明,否则这些值都是从 shell 继承的。
• shell 的打开文件,以及由重定向到命令指定的任何修改和添加
• 当前工作目录
• 文件创建模式掩码
• 标记为导出的 shell 变量和函数,以及为命令导出的变量,在环境中传递(参见第 3.7.4 节 [环境],第 37 页)
• shell 捕获的陷阱被重置为从 shell 的父级继承的值,shell 忽略的陷阱将被忽略 在这个单独的环境中调用的命令不会影响 shell 的执行环境。
在 的情况下bash,这取决于是否$SHELLOPTS在环境中。
bash-4.4$ export SHELLOPTS
bash-4.4$ set -x
bash-4.4$ bash -c 'echo x'
+ bash -c 'echo x'
+ echo x
x
Run Code Online (Sandbox Code Playgroud)
看看如何bash -c 'echo x'继承xtrace选项。对于由 设置的选项shopt,它是相同的,但带有$BASHOPTS变量。
xtrace当您想要运行bash脚本(或任何运行bash脚本的命令)和bash它可能调用的所有其他脚本时,它特别适用于调试选项,递归使用xtrace(前提是set +x在这些脚本中没有任何作用)。如果你sh是bash,那也会影响他们,所以也会影响system("command line")其他语言的:
env SHELLOPTS=xtrace some-command
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1918 次 |
| 最近记录: |