我已经安装了mill
在 arch linux 上,我的默认 shell 是 Fish。由于该文件/usr/bin/mill
不是以 shebang 开头,因此 Fish 不会执行该文件。相反,它响应
$ mill
Failed to execute process '/usr/bin/mill'. Reason:
exec: Exec format error
The file '/usr/bin/mill' is marked as an executable but could not be run by the operating system.
我可以执行 mill,bash -c 'mill'
但我不想一直这样做。我也不想将其添加为 mill 的别名。当脚本中没有 shebang 而不是失败时,是否可以将 Fish 配置为始终使用 sh 或 bash?或者可能存在操作系统级别的问题?
编辑: 米尔只是一个例子。我已经多次遇到了 Fish 的这个功能,并且使用了我不应该编辑的不同脚本。这就是为什么我正在寻找一种方法来永远避免该功能,而不是仅针对磨机进行一次性修复。
答案1
你不能那样做。
你可以检查它的源代码:
execve(actual_cmd, argv, envv);
err = errno;
// Something went wrong with execve, check for a ":", and run /bin/sh if encountered. This is a
// weird predecessor to the shebang that is still sometimes used since it is supported on
// Windows. OK to not use CLO_EXEC here because this is called after fork and the file is
// immediately closed.
请注意它如何使用execve
(不是execvp
或,在 的情况下execlp
会回退到),并且它只会运行以(本身是一个相当可疑的功能;特别是在出现其他错误的情况下使用它)的脚本比)。/bin/sh path
ENOEXEC
/bin/sh
:
fish
ENOEXEC
但是,如果您可以编辑脚本以:
在开头添加 a,那么您也可以编辑它以添加适当的 she-bang。