フィッシュシェルのデフォルトインタプリタの設定

フィッシュシェルのデフォルトインタプリタの設定

私はインストールしましたmillArch Linuxでは、私のデフォルトのシェルはFishです。ファイルが/usr/bin/millshebangで始まらないため、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.

それがどのように使用されるかexecveexecvpまたは代替の場合execlp)、そして(それ自体がやや疑わしい機能です。特に他のエラーの文脈で使用されている場合)、スクリプトのみを実行することに注意してください。/bin/sh pathENOEXEC/bin/sh:fishENOEXEC

ただし、スクリプトを編集して:最初にaを追加できる場合は、適切なシャバンを追加するように編集することもできます。

関連情報