有一个非常简单的 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。