Fish
在fish shell中設置預設解釋器
我已經
mill
在 arch linux 上安裝了 fish 作為我的預設 shell。由於文件/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 with
bash -c 'mill'
但我不想一直這樣做。我也不想將其添加為 Mill 的別名。當腳本中沒有shebang而不是失敗時,是否可以將fish配置為始終使用sh或bash?或者可能存在作業系統級別的問題?編輯: 米爾只是一個例子。我用不同的腳本多次遇到魚的這個特性,我不應該編輯這些腳本。這就是為什麼我正在尋找一種方法來永遠避免使用該功能,而不是一次性修復。
你不能那樣做。
你可以查看它的原始碼:
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
(notexecvp
or ,在 的情況下execlp
有一個回退) 並且它只會在腳本以( 本身是一個非常可疑的功能開始時執行腳本;特別是因為在其他錯誤的情況下也會使用它比)。/bin/sh path``ENOEXEC``/bin/sh``:``fish``ENOEXEC
但是,如果您可以編輯腳本以
:
在開頭添加 a,您也可以編輯它以添加適當的 she-bang。