写作的原因是什么
#! /bin/bash
在每个bash脚本的最开始?
我的意思是,我知道这是一种黑客攻击,但我想知道它是如何起作用的?
答案 0 :(得分:4)
看看shebang!。
答案 1 :(得分:3)
如果使用显式解释器调用脚本,例如
bash foo.sh
/bin/bash foo.sh
dash foo.sh
sh foo.sh
无论shebang说什么,你的选择翻译都会被使用,这只是一个评论。
如果您使脚本可执行,并启动它:
chmod a+x foo.sh
./foo.sh
内核查找shebang并使用其中指定的解释器启动程序。由于内核不知道PATH,因此必须给出整个路径,或者必须使用env
:
#!/usr/bin/env python
选择程序的本地路径。
由于dash,bash,zsh等不完全兼容,你应该在没有特定解释器的情况下调用程序,因为作者应该知道他做了什么。
也许在您的系统上sh
是指向/bin/bash
的链接,但请注意! shell可以反省它是如何被调用的,而bash可以以一种称为POSIX模式的方式运行,这种方式略有不同,只是它通常所做的一部分。
如果您编写用于安装的脚本或可能在不同平台上运行的服务器(如OsX,Linux,Solaris等),可以使用不同的shell,那么您将尝试将自己限制在此子集中,以获得兼容性,可重复使用的结果。
但是在您的私人计算机上,您可能更喜欢更方便的shell,例如zsh
和bash
。
答案 2 :(得分:1)
尝试以下方法(我应该确切地说这不是有害的):
创建一个包含以下内容的新文件:
#!/bin/rm
whatever
chmod +x the_file
./the_file
因此,正如肯特建议的那样,她在一个可执行文件中告诉了另一个可用作解释器的可执行文件的路径。
答案 3 :(得分:0)
Unix不使用扩展名(.sh,.bat,等等)来识别文件内容。
“#!”表示法(shebang)是一个magic number,用于告诉内核如何通过提供其预期解释器的路径来执行脚本。
答案 4 :(得分:0)
在脚本中调用Bourne shell或兼容的shell。
看:Shebang