shell 跨不同 linux 发行版的脚本行为

shell script behavior across different linux distros

我有一个关于跨 2 个不同操作系统的 shell 脚本和进程表的一般性问题。

在 SuSE Linux 系统上,我 运行 一个名为 joe.sh 的脚本。这是一个执行以下操作的简单脚本


echo "Hello Joe "     
read x

如果我执行 ps -ef | grep [j]oe.sh -,它会找到类似这样的结果


joe      15532 24267  0 09:40 pts/2    00:00:00 /bin/sh ./joe.sh

假设我启动了另一个终端并且没有在脚本上按回车键。

但是,如果我在 oracle linux 系统上做同样的事情,在我向脚本添加一个 shebang 之前我找不到匹配项

#!/bin/bash
echo "Hello Joe"
read x

SuSE 环境中是否有一些可以设置的默认值?我想在 Oracle Linux 系统上复制该行为。

脚本应该总是有一个 shebang 行,除非它们是 sourced。 default shell in SuSE 是 Bash。将 #!/bin/bash 添加到顶部。

我想你要找的是:interpreter-script

无论如何,脚本应该始终有一个 shebang 行。 (我是约翰)

如您在状态行中所见,调用的默认 shell 是 sh

joe 15532 24267 0 09:40 pts/2 00:00:00 /bin/sh ./joe.sh

所以它正在执行sh

如上所示,默认情况下,SuSE 中的shell 应该是Bash。但是,这可以为每个用户进行不同的配置。任何用户(通常在基于 UNIX 的系统中)的默认值 shell 在 /etc/passwd 文件中定义。

该文件的每一行都是一个用户,字段由: 符号分隔。第7个字段是默认用户shell(用户登录时执行的shell)

可以在以下位置找到更详细的解释:http://www.cyberciti.biz/faq/understanding-etcpasswd-file-format/