当我们用命令打印控制台设置时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 次 |
最近记录: |