Shell 为什么我们在使用shebang时需要使文件可执行?

Shell 为什么我们在使用shebang时需要使文件可执行?,shell,unix,scripting,Shell,Unix,Scripting,我是一名unix新手,正在探索shebang line的功能 例如,假设我有一个program.py要执行 执行的一种方法是直接调用解释器命令: python program.py 如果使用shebang行,我将包括: #!/usr/bin/env python 在文件的开头告诉系统使用什么解释器 那么,在这种情况下,我们为什么需要通过调用以下命令使文件“可执行”: chmod +x program.py program.py 然后打电话: ./program.py 要执行它 而不是

我是一名unix新手,正在探索shebang line的功能

例如,假设我有一个program.py要执行

执行的一种方法是直接调用解释器命令:

python program.py
如果使用shebang行,我将包括:

#!/usr/bin/env python 
在文件的开头告诉系统使用什么解释器

那么,在这种情况下,我们为什么需要通过调用以下命令使文件“可执行”:

chmod +x program.py
program.py
然后打电话:

./program.py
要执行它

而不是直接呼叫:

chmod +x program.py
program.py

要执行它?

您正在问两个无关的问题

我们使其可执行,以便操作系统读取shebang行


我们在它前面加上“/”前缀,以便shell可以找到它并告诉操作系统执行它,因为脚本不太可能位于
$PATH

中列出的目录中
chmod+x program.py
的原因是安全性。如果我们采取额外的步骤来设置可执行位,操作系统将只直接执行一个文件。如果没有“/”,它不会在当前目录中调用program.py吗?对不起,我想我的意思是,在第一种情况下,我们基本上调用两个步骤:1。Chmod+x program.py;2. ./program.py,在第二种情况下,我们输入'program.py'并直接按enter键,而不调用chmod。只有在
$PATH
中列出的目录中的可执行文件才能执行,而无需指定其目录。但无论如何,它们都必须是可执行的。我只是提出了另一个问题(作为初学者…)。在通常情况下,我们会像“python program.py”一样执行program.py。为什么我们不在这里使program.py成为可执行文件呢?因为您不是在执行“program.py”,而是在执行“python”并将“program.py”作为参数传递给它。