1つのコマンドが別のコマンド内で使用されます

1つのコマンドが別のコマンド内で使用されます

djvused コマンドには次のオプションがあります。

-e コマンド

djv はオプション引数コマンドで指定されたコマンドを実行するために使用されます。不要なシェル拡張を防ぐために、djvusedコマンドを一重引用符で囲むことをお勧めします。

たとえば、djvused myfile.djvu -e 'print-pure-txt'

私にとって珍しいことは、1つのコマンド(ここではdjvused)が別のコマンド(-eここではオプション)を実行できることです。これがどのように可能か疑問に思います。これはコマンドラインインターフェイスで一般的な慣行ですか?

これはawkコマンドで使用されている印刷コマンドと似ていますか?

私が知っている1つのコマンドが別のコマンド内で使用される唯一の方法は次のとおりです。

echo `echo hello`

ありがとうございます!

ベストアンサー1

これは非常に一般的であり、一部のプログラムはこの方法でのみ機能します。

心に浮かぶより一般的な例は次suのとおりです。sudoxterm

su -c 'ls -l /root'
sudo ls -l root
xterm -e 'top -d 10'

あなたの例とは異なります

echo `echo hello`

バックティックはシェルによって解釈され、プログラム自体は何もしません。

suまた、との違いに注意してくださいsudo。 1つ目は、拡張変数など、ユーザーの観点から設定するのが難しい文字列を使用します。今後コマンドで確認できます。 2番目のコマンドは一連の文字列で、はるかに簡単です(例には引用符はありませんsudo)。

内部タスクを実装するために何を使用しますか?デフォルトでは、systemライブラリルーチンとシステムコールexecの2つの方法があります。最初はシェルを呼び出し、次のようなさまざまなシェル拡張を許可します。

su -c 'ls -ld /root/.*'

第2のアプローチは、この自由を許さない。

おすすめ記事