ホームページ » の仕方 » シェルスクリプトで#!/ bin / shの代わりに#!/ bin / bashを使用する方が良い場合は?

    シェルスクリプトで#!/ bin / shの代わりに#!/ bin / bashを使用する方が良い場合は?

    新しいシェルスクリプトを作成するときは、できるだけ問題がないことを確認する必要がありますが、使用するのに最適なシェルバンを確認するのがやや混乱することがあります。そのメモについて、今日のSuperUser Q&Aの投稿は、混乱した読者の質問に対する答えを持っています.

    本日の質疑応答セッションは、コミュニティ主導のQ&A Webサイトのグループである、Stack Exchangeの下位区分であるSuperUserの好意により提供されます。.

    質問

    SuperUserの読者Hendreは、いつ使うのが良いのか知りたいのです。 #!/ bin / bash の代わりに #!/ bin / sh シェルスクリプト内:

    いつ使うのが適切か #!/ bin / bash のではなく #!/ bin / sh シェルスクリプト内?

    いつ使うのが良いですか #!/ bin / bash の代わりに #!/ bin / sh シェルスクリプト内?

    答え

    SuperUserコントリビュータの重さは私たちに答えを持っています。

    要するに:

    • POSIX sh仕様のスーパーセットを実装するシェルがいくつかあります。異なるシステム上, / bin / sh ash、bash、dash、ksh、zshなどへのリンクになることがあります。.
    • あなたがsh機能だけに固執する限り、あなたは使うことができます(そしておそらくそうすべきです) #!/ bin / sh どのシェルであっても、スクリプトは正常に動作するはずです。.
    • bash特有の機能(つまり配列)を使い始めるのであれば、特にbashを要求するべきです。 / bin / sh あなたのシステムですでにbashを起動しています。他の人のシステムではそうではないかもしれません、そしてあなたのスクリプトはそこで実行されないでしょう。もちろん同じことがzshとkshにも当てはまります。.
    • スクリプトが個人的な使用のみを目的としている場合でも、オペレーティングシステムによっては変更されることがあります。 / bin / sh アップグレード中たとえば、Debianでは以前はbashでしたが、後でごくわずかなダッシュに置き換えられました。バシズムを使ったが持っていたスクリプト #!/ bin / sh 突然壊れた.

    しかしながら:

    • でも #!/ bin / bash それは正しくありません。異なるシステムでは、bashは以下の場所に住んでいるかもしれません。 / usr / bin, / usr / pkg / bin, または / usr / local / bin.
    • より信頼できる選択肢は #!/ usr / bin / env bash, どっちを使う $ PATH. envツール自体も厳密には保証されていませんが, / usr / bin / env まだより多くのシステムで動作します / bin / bash する.

    説明に追加するものがありますか?コメントで音を消す。他の技術に精通したStack Exchangeユーザーからの回答をもっと読みたいですか?こちらのディスカッションスレッドをチェックしてください。.

    画像クレジット:ウィキペディア