关于bash
对于新的tty,当执行echo $SHLVL
命令时,它会按预期显示 1。现在,如果在同一个tty中执行bash
命令,稍后再执行命令,echo $SHLVL
它会显示 2。当然,必须使用exit
命令退出。此外,我确实意识到每个 bash 都有自己的历史命令,并且用户正在当前 bash 中交互或可以访问。
到目前为止,经过研究后发现它是一种子 shell(如果我错了请纠正我),因为大多数情况下都是通过这种方法创建子 shell (<command>)
。
就像玩游戏一样,我执行了bash cat /etc/os-release
命令,但没有任何打印内容。
因此很好奇
问题
- 怎么
bash <command-argument>
運作?
作为额外的问题:
- 在什么情况下
bash <command-argument>
必须采用该方法?
观察
答案中指出会出现错误消息。好吧,提到的错误是正确的(在 Ubuntu 和 Fedora 上测试过),但在我的例子中,该bash cat /etc/os-release
命令被用作创建基于 Linux 的 docker 容器的参数,并且没有显示任何错误,正如一开始所指出的那样,这就是创建这篇文章的原因。好吧,这是另一回事了
bash <command-argument>
在手册中有关调用 Bash 的部分中有描述:所以
查找
cat
包含 shell 命令的文件(即 shell 脚本)。通常,您应该看到类似以下的错误除非你碰巧
cat
在当前目录中有一个名为的文件,在这种情况下 Bash 会尝试运行该文件。我想不出在什么情况下
bash <command-argument>
必须使用,但它在各种情况下都很有用,例如:bash -x script
)。这是通过 shebang 执行脚本时使用的机制:以 开头的脚本
#! /bin/bash
最终以 运行/bin/bash <path-to-the-script>
。因此,直接运行需要的脚本bash
或使用bash <path-to-the-script>
是等效的。(但请参阅为什么“#! /bin/sh -”shebang 中的“-”?以获取有用的 shebang 信息。)