私はインストールしましたmill
Arch Linuxでは、私のデフォルトのシェルは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がないときに失敗するのではなく、常にshまたはbashを使用するようにフィッシュを設定できますか?それとも、OSレベルに問題があるのでしょうか?
編集する: ミルは一例です。私は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を追加できる場合は、適切なシャバンを追加するように編集することもできます。