运行没有 shebang 的脚本的默认解释器是什么?

运行没有 shebang 的脚本的默认解释器是什么?

有一个非常简单的 shell 脚本,像这样:

echo "Hello World"

没有 shebang 行,文件上的可执行位设置并像这样调用:

./my_sript

运行脚本的解释器是什么?系统如何找到它以及默认解释器定义在哪里?

答案1

默认将使用此用户的 shell(而不是当前 shell)。查看/etc/passwd- 它在那里定义,并将在登录时启动。您可以使用它chsh来更改当前用户的默认 shell。

答案2

我不同意 jvb 的回答。考虑以下 csh 格式的脚本,没有 shebang:

#
set x = 'a'
if ($x == 'a') then
   echo "running csh"
endif

在我的计算机上,默认 shell 是 (t)csh,结果是:

anukis% ./shell-test
running csh

现在,编辑脚本以删除顶行:

set x = 'a'
if ($x == 'a') then
   echo "running csh"
endif

现在重新运行它,结果是:

anukis% ./shell-test
./shell-test: 6: Syntax error: end of file unexpected (expecting "fi")

有什么区别?区分 csh 和 (Bourne) sh 的古老方法是:如果第一行以 octothorpe (“#”) 开头,则假定它是 C-shell 脚本,否则为 Bourne(-type) shell。

相关内容