Cで書かれたプログラムを見ています。このプログラムの問題は、このコード行に依存します。
system("/usr/bin/env echo and now what?");
私はsystem()がコマンドを実行していることを知っています。しかし、なぜこれが起こるのかよくわかりません。
しばしばそれは「エコ、今はどうですか」です。ところで、なぜ「usr/bin/env」を前にする必要がありますか?それはまさにどんな役割を果たしますか?
ベストアンサー1
/usr/bin/env
プログラム名の後にプログラムを実行します。環境変数で構成されたディレクトリで、実行可能ファイルとしてプログラム名を見つけますPATH
。これは:次にいくつかの環境変数の割り当て、次にプログラム名と引数をenv
使用する特別なケースです。これには正確にゼロの変数割り当てがあります。env
/usr/bin/env echo …
/bin/echo …
パスをハードコーディングしないこと以外は同じです。echo
システムと値に応じて、、、、、、、、…PATH
/bin/echo
/usr/bin/echo
/usr/xpg4/echo
/usr/ucb/echo
/usr/local/bin/echo
/home/bob/bin/echo
ほとんどすべてのシェルに組み込みecho
コマンドがあります。シェル組み込みコマンドと外部コマンドの動作に違いがある可能性があります。実際、echo
2 つの点でコマンド間に違いがあります。最初の引数が次に始まるとどうなるか-
(一部のecho
バージョンでは複数のオプションを処理する)バックスラッシュを処理する方法(一部のバージョンでは文字通り印刷し、他のバージョンではエスケープ文字として扱う)。したがって、echo
これらの実装依存の動作を使用したい場合は、強制バージョンが役に立ちます。ほとんどの場合、使用する方が良いですprintf
。アンティークを除いて、持ち運び可能で持ち運びできるprintf
すべての機能を実行します。echo
サンプルコードに渡されたパラメータを使用すると、エコー実装の選択は重要ではありません。この狂気の理由があれば、それを見つけるためにもう少しコンテキストが必要になるでしょう。