跨越不同的Linux发行版的shell脚本行为

时间:2016-04-22 15:19:09

标签: linux bash shebang

我有一个关于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系统上做同样的事情,我得不到匹配UNTIL我在脚本中添加了一个shebang

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

SuSE环境中是否存在默认设置?我想在Oracle Linux系统上复制该行为。

3 个答案:

答案 0 :(得分:2)

脚本应始终有一个shebang线,除非它们是source d。 default shell in SuSE是Bash。将#!/bin/bash添加到顶部。

答案 1 :(得分:0)

我认为你要找的是:interpreter-script

无论如何,剧本应该总是有一个shebang线。 (我是第二个约翰)

答案 2 :(得分:0)

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

  

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

所以它正在sh执行。

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

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

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