質問: 任意のシェルで実行されるシェルスクリプトの記述(複数のシバン行を使用していますか?) 私はシェルスクリプトの詳細を学び始めたばかりで、常にスクリプトをファイルに入れてchmod +xとマークし、次に/path/to/script.shを実行して、デフォルトのインタープリターにデフォルトの方法を使用させていますそれは私がzshであると私が想定したもので、それは私が自分のシェルに使用したものだからです。どうやら、zshプロンプトからスクリプトを実行したとしても、スクリプトにzsh固有のものを入れ始めたので、/bin/shを実行しないと失敗するため、デフォルトではzsh /path/to/script.shだけのようです。ポイントを得るために、ここに私の質問があります: 最初にシバン行(#!/path/to/shell)がない場合、どのシェルがスクリプトを実行しますか? /bin/shと思いますが、確認できません。 任意のプラットフォームで実行されるシェルスクリプトを作成するという観点から、「ベストプラクティス」と見なされるものは何ですか? (ok、これは一種の自由回答です) zshを使用しようとし、zshが使用できない場合にbashにフォールバックするスクリプトを作成することは可能ですか?以下のように2つのシバン行を入れてみましたが、zshのないマシンで試した場合、bad interpreter: /bin/zsh: no such file or directoryでエラーになります。 #!/bin/zsh #!/bin/bash
回答: 1)実行している現在のシェル。2)同じシェルタイプ(bash/dash/ash/csh /どのフレーバーでも)を使用し、「サポートされているプラットフォーム」がデフォルトで使用するシェルをインストールしていることを確認します。また、システムで一般的に使用可能なコマンドを使用してみてください。マシン固有のオプションは避けてください。3)interpreter directiveには実際には「if-then-else」ロジックはありません。サポートするすべてのシステムに存在する必要があるシェルを指定する必要があります...つまり、スクリプトがすべてのシェルでかなり汎用的である限り、#!/bin/bashまたは汎用の#!/bin/shを指定します。