以不同的方式看待 Bash 调用

以不同的方式看待 Bash 调用

看来要么我不明白这些选项的含义,要么 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 下的手册页中找到了该信息。但这可能不太容易理解,因为这似乎不是一个人通常会做的事情。

相关内容