1つのコマンドしか書けないところに、複数のコマンドを;
や|
等でつないで書くとか、その他シェルの機能を使いたい場合。
例:xargs
で複数コマンドを実行したい。
(リストアップしたファイルに対して、sed
でバックアップ取りつつ書き換えて、バックアップを移動)
sh
1find ~~~~ | xargs -I@ bash -c "sed -i.bak 's/xx/yy/' @ && mv @.bak BKUP/"
あと、プログラムからプログラムを起動する場合。例えばC等で使うsystem()
や、Pythonでいうとsubprocessパッケージでshell=True
でコマンドを起動した場合は、内部的に-c
が使われています。
このように、「コマンドラインで実行する時と同じように書いておくと、期待通り実行してくれる」という機能は内部的に-c
を使っています。このとき使うシェルは/bin/sh
決め打ちだったり、環境変数SHELL
を見たり等いろいろでしょう。
シェルを使わないでも、プログラムから外部プログラムを起動することはできますが、空白で引数を分割するとか、;
で複数コマンド実行とか、>
でリダイレクトとか、$
で環境変数展開とかは、シェルの機能なので、シェルを使わないで外部プログラムを起動する場合は使えないです。Pythonのsubprocessでshell=False
の場合などですね。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。