该sh命令在交互使用和在 bash 脚本内部使用时的目的是什么?
除了 hash bang 行(第一行)之外,应该在 bash 系统上sh替换为bash?
例子:
#!/bin/bash
sh -c "command"
Run Code Online (Sandbox Code Playgroud)
pot*_*sdl 13
这么多问题......我会一次回答一个。
1) 交互式使用 sh 命令的目的是什么?提供一个新的环境上下文,所以如果你想尝试一些环境变量设置,你可以。当你完成后,exit出去并没有造成任何伤害。
此外,如果您在不同的 shell 中,例如 zsh 或 csh,并且想在shshell 中执行,这会切换您。
2) 当在上面的 bash 脚本中使用时,它会再次为“命令”运行提供一个包含的环境上下文。您也可以将它与
#!/bin/bash
sh -c "command" &
Run Code Online (Sandbox Code Playgroud)
并分叉“命令”以与脚本的其余部分并行运行。
3)我想说,如果它是特别需要的东西bash,那么明确地把它放在你的散列行中。但由于在大多数后来的 *nix 系统sh上等效于bash,因此可能没有必要。
sh?如果您只是从shshell开始,您将在当前 shell 中启动另一个 shell。
sh在脚本中使用时会发生什么?同样的事情,您在正在处理脚本的 shell 中启动另一个 shell。
/bin/bashif 那是什么/bin/sh点吗?没有。如果脚本被设计为与任何shell一起工作,那么它被设计为针对所有 shell 之间的最小公分母工作(据我所知,这是POSIX 标准的一部分)。
更改为特定的解释器不应该是有害的(因为它们都符合相同的标准),但它会降低兼容性,同时根本没有任何好处。
/bin/sh吗?不可以。如果您自己编写脚本,那么您还可以使用更具体的解释器(如 bash),前提是该解释器提供了您想要使用的附加功能。但请记住,使用您的脚本的每个人都需要拥有您选择的解释器。
如果您只是想在自己的上下文中启动一个新进程,那么无论如何,请使用/bin/sh.
如果你想在它自己的上下文中执行某些东西,你应该在一个新的 shell 中执行它。
实现这一点的最简单方法是启动一个新的 shell(使用sh)并将命令传递给它。
只要您的东西不是专门为特定 shell 制作的脚本,就没有理由调用特定的 shell。只需调用任何外壳,通过使用sh。
如果您有一个使用仅在 中可用的特殊语法的脚本,bash那么您应该相应地设置shebang。