![运行没有 shebang 的脚本的默认解释器是什么?](https://linux22.com/image/1532656/%E8%BF%90%E8%A1%8C%E6%B2%A1%E6%9C%89%20shebang%20%E7%9A%84%E8%84%9A%E6%9C%AC%E7%9A%84%E9%BB%98%E8%AE%A4%E8%A7%A3%E9%87%8A%E5%99%A8%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
有一个非常简单的 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。