为什么python允许bash脚本在不可执行的情况下运行?

为什么python允许bash脚本在不可执行的情况下运行?,python,bash,pyqt4,Python,Bash,Pyqt4,我有一个简单的bash脚本,它运行“apt update”,我试图通过python这样调用它。虽然我没有chmod+xupdate.shIt,但它仍在运行 def updateUsingBash(self): p = QtCore.QProcess() p.finished.connect(self.onFinished) p.start('sh', ['update.sh']) p.waitForFinished(-1) def onFinished(self

我有一个简单的bash脚本,它运行“apt update”,我试图通过python这样调用它。虽然我没有
chmod+xupdate.sh
It,但它仍在运行

def updateUsingBash(self):
    p = QtCore.QProcess()
    p.finished.connect(self.onFinished)
    p.start('sh', ['update.sh'])
    p.waitForFinished(-1)

def onFinished(self, exit_code, exit_status):
    print "script finished with exit code :", exit_code

这与
python foo.py
运行
foo.py
时没有将后者标记为可执行的方式完全相同——它只是一个包含脚本文本的数据文件,正在执行的是
python
sh
,分别。

这与
python foo.py
运行
foo.py
时没有将后者标记为可执行文件的方式完全相同——它只是一个包含脚本文本的数据文件,正在执行的东西分别是
python
sh

您没有执行
update.sh
。您执行了
sh
并将其作为参数传递给
update.sh
。这使得
sh
update.sh
解释为shell脚本

顺便说一句,请注意
sh
与未执行
update.sh
bash
不完全相同。您执行了
sh
并将其作为参数传递给
update.sh
。这使得
sh
update.sh
解释为shell脚本


顺便说一下,请注意,
sh
bash

sh update不完全一样。sh
告诉
sh
update.sh
作为包含要运行的文本的数据文件读取。这在任何地方都不涉及Python的情况下是正确的。这与
Python foo.py
运行
foo.py
时没有可执行性是一样的。您没有执行
update.sh
。您正在执行的
sh
sh
不是“使用bash”
sh
是POSIX sh(关于现代系统,70年代的伯恩关于古代系统)<代码>bash是bash。即使
sh
是指向
bash
的符号链接,当这样调用时,它也会在POSIX兼容模式下运行。@CharlesDuffy,感谢您解释
sh update。sh
告诉
sh
update.sh
读取为包含要运行的文本的数据文件。这在任何地方都不涉及Python的情况下是正确的。这与
Python foo.py
运行
foo.py
时没有可执行性是一样的。您没有执行
update.sh
。您正在执行的
sh
sh
不是“使用bash”
sh
是POSIX sh(关于现代系统,70年代的伯恩关于古代系统)<代码>bash是bash。即使
sh
是指向
bash
的符号链接,当这样调用时,它也会在POSIX兼容模式下运行。@CharlesDuffy,感谢您的解释