![以不同的方式看待 Bash 调用](https://linux22.com/image/68714/%E4%BB%A5%E4%B8%8D%E5%90%8C%E7%9A%84%E6%96%B9%E5%BC%8F%E7%9C%8B%E5%BE%85%20Bash%20%E8%B0%83%E7%94%A8.png)
看来要么我不明白这些选项的含义,要么 bash 的行为相同(作为读取标准输入的交互式 shell),无论如何都没有任何选项。我什么时候想明确使用这些选项?
答案1
以不同的方式看待 Bash 调用
参考手册已经很详细了描述关于如何调用 Bash。不过,我更喜欢以稍微不同的方式记录它:
bash <options> <script_file> [<arguments>]
bash <options> -c <command_string> [<arguments>]
bash <options> [-s [<arguments>]
前两个是非交互式的,因此没有相关的功能(提示、作业控制、命令历史记录……);但是,如果您需要这些功能,可以使用 -i 标志强制执行它们。
第三个是交互式的,可选的 -s 标志在下面的段落中是合理的......
指定参数
示例 1:基本
-s 选项可用于指定参数:
bash -s a b c
启动一个 shell...在这个 shell 中我们可以检查参数:
echo $1 $2 $2
反映 bash 命令的参数:
a b c
如果没有“-s”选项,第一个位置参数将被解释为文件名:
bash a b c
给出
bash: a: No such file or directory
示例 2:使用定界符
之前使用的 -s 选项可用于向定界文档提供参数(当您不想使用文件来嵌入命令时):
bash -s a b c <<'EOC'
echo $1 $2 $3
EOC
给出:
a b c
注意bash命令执行heredoc中的命令,然后退出;这将带您返回到调用 bash 命令的 shell。
示例 3:管道化
考虑将 bash 嵌入管道中(当您需要实现一些内联脚本时),再次可以利用提供参数的机会
echo 'echo HELLO $1' | bash -s WORLD
给出:
HELLO WORLD
这是一个人为的示例,但对于一些更复杂的脚本(带有定界符!),这可以派上用场......
答案2
据我所知,它似乎用于测试目的。启动文件可以使用它来测试状态以及 shell 脚本。
默认情况下,当您调用 bash shell 时,它使用 -i 和 -s,因此我假设出于测试目的,您可以通过脚本或文件使用这些选项显式调用 shell,以测试正常登录 bash shell 将提供的状态。
我在注释中指出的调用 Esref 下的手册页中找到了该信息。但这可能不太容易理解,因为这似乎不是一个人通常会做的事情。