[解決済み] usr/bin/env bash」と「#!/usr/bin/bash」の違いは何ですか?
質問
Bashスクリプトのヘッダーで、これらの2つの文の違いは何ですか。
-
#!/usr/bin/env bash
-
#!/usr/bin/bash
を相談したところ
env
マンページ
をクリックすると、このような定義が得られます。
env - run a program in a modified environment
どういう意味ですか?
どのように解決するのですか?
を介してコマンドを実行する
/usr/bin/env
は、そのプログラムのデフォルトのバージョンが何であれ、現在の
環境
のアイロメントを使用します。
この方法では、それらのパスがシステムによって異なる場所にある可能性があるため、システム上の特定の場所から探す必要はありません。 パスの中にある限り、それを見つけることができるのです。
デメリットとしては、複数の引数を渡すことができなくなることです(例:以下のように書くことができなくなります)。
/usr/bin/env awk -f
のように、Linux をサポートしたい場合は
POSIXは曖昧
Linuxでは、最初のスペース以降を1つの引数として解釈します。また
/usr/bin/env -S
のいくつかのバージョンで
env
を使えば回避できますが、そうするとスクリプトの移植性がさらに低下し、かなり最近のシステム(例えば、Ubuntu 16.04以降でなくても)で壊れてしまうことになります。
もうひとつの欠点は、明示的に実行ファイルを呼び出しているわけではないので、ミスの可能性があることと、マルチユーザーシステムでのセキュリティの問題です(もし誰かが自分の実行ファイルを
bash
のように、パスの中に入ってしまいます。)
#!/usr/bin/env bash #lends you some flexibility on different systems
#!/usr/bin/bash #gives you explicit control on a given system of what executable is called
状況によっては、前者の方が好ましいかもしれません(例えば、複数のバージョンのpythonスクリプトを実行する場合、実行行を作り直す必要がありません)。 しかし、セキュリティが重視される状況では、コードインジェクションの可能性を制限するために、後者が好まれるでしょう。
関連
-
[解決済み] FIN_WAIT1とはどのような意味ですか?
-
[解決済み] Linuxです。WGET -i オプションを使用したスキームが見つからない
-
[解決済み] STRACEがEAGAINを表示する理由(リソースが一時的に使用できないため)
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] シェルで、「2>&1」はどういう意味ですか?
-
[解決済み] Bashでコマンドの出力に変数を設定するにはどうすればよいですか?
-
[解決済み] time(1) の出力における 'real', 'user' および 'sys' はどのような意味ですか?
-
[解決済み] Bashでファイルの中身をループする
-
[解決済み] 好ましいBashのシェバングとは?
-
[解決済み】Bashでファイル名と拡張子を抽出する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] usr/bin/env bash」と「#!/usr/bin/bash」の違いは何ですか?
-
[解決済み] bash: cd: そのようなファイルやディレクトリはありません
-
[解決済み] diffツールの1c1とはどういう意味ですか?
-
[解決済み] SIGRTMAXとSIGRTMINの使い方は?
-
[解決済み] アセンブリの制約
-
[解決済み] php] <defunct>のプロセスを削除することはできますか?
-
[解決済み] sudo: must be setuid root" というメッセージが出るが、sudo は既に root が所有している [closed] 。
-
[解決済み] Solaris では lsof -i が相当します。
-
[解決済み] "echo -n" は "-n" を表示します。
-
[解決済み】なぜ #!/usr/bin/env bash は #!/bin/bash よりも優れているのでしょうか?