当我们用命令打印控制台设置时echo $-,我们himBHs默认输出。但是,当我们在任何脚本文件中运行相同的命令时,我们仅输出hB.
root@root:~# echo $-
himBHs
root@root:~# ./abc.sh
hB
root@root:~#
Run Code Online (Sandbox Code Playgroud)
我想知道的是,即使我们从/bin/bash环境中运行脚本,为什么不应用相同的默认设置?
例如,当我使用/bin/bash 控制台上的命令启动新的子 shell 进程并列出设置时,我会得到输出himBHs。
root@root:~# /bin/bash
root@root:~# echo $-
himBHs
Run Code Online (Sandbox Code Playgroud)
当我尝试从shell 文件中执行相同的过程时,我得到的输出是“ hB ”。
root@root:~# ./abc.sh
hB
Run Code Online (Sandbox Code Playgroud)
我已经尝试过使用 shebang 和不使用 shebang 的相同过程,但是我的脚本文件是或者bash script_file如果./script_file我运行,它会给出相同的结果(hB)。
我究竟缺少什么?
因为当您运行脚本时,父 shell(您从中运行命令的 shell)会启动一个非交互式 shell 来运行您的脚本,该脚本禁用了交互式标志i,并且仅打开两个选项
-h在查找执行命令时定位并记住(散列)命令。-B允许 shell 执行大括号扩展您可以看到完整的选项列表,这些选项将在- The Setbuiltinset的输出中看到$-
交互式 shell 中可用的其他选项,-i用于指示以交互模式运行 shell
-m允许作业控制-H启用!样式历史替换| 归档时间: |
|
| 查看次数: |
10827 次 |
| 最近记录: |