teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

誤記訂正

2021/10/26 09:15

投稿

otn
otn

スコア86354

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  1つのコマンドしか書けないところに、複数のコマンドを`;`や`|`等でつないで書くとか、その他シェルの機能を使いたい場合。
2
2
 
3
- 例:`args`で複数コマンドを実行したい。
3
+ 例:`xargs`で複数コマンドを実行したい。
4
4
  (リストアップしたファイルに対して、`sed`でバックアップ取りつつ書き換えて、バックアップを移動)
5
5
  ```sh
6
6
  find ~~~~ | xargs -I@ bash -c "sed -i.bak 's/xx/yy/' @ && mv @.bak BKUP/"

1

補足

2021/10/26 09:14

投稿

otn
otn

スコア86354

answer CHANGED
@@ -1,10 +1,10 @@
1
1
  1つのコマンドしか書けないところに、複数のコマンドを`;`や`|`等でつないで書くとか、その他シェルの機能を使いたい場合。
2
2
 
3
3
  例:`args`で複数コマンドを実行したい。
4
+ (リストアップしたファイルに対して、`sed`でバックアップ取りつつ書き換えて、バックアップを移動)
4
5
  ```sh
5
6
  find ~~~~ | xargs -I@ bash -c "sed -i.bak 's/xx/yy/' @ && mv @.bak BKUP/"
6
7
  ```
7
- (リストアップしたファイルに対して、`sed`でバックアップ取りつつ書き換えて、バックアップを移動)
8
8
 
9
9
  あと、プログラムからプログラムを起動する場合。例えばC等で使う`system()`や、Pythonでいうとsubprocessパッケージで`shell=True`でコマンドを起動した場合は、内部的に`-c`が使われています。
10
10
  このように、「コマンドラインで実行する時と同じように書いておくと、期待通り実行してくれる」という機能は内部的に`-c`を使っています。このとき使うシェルは`/bin/sh`決め打ちだったり、環境変数`SHELL`を見たり等いろいろでしょう。