#author("2019-11-20T07:52:32+00:00","","") #author("2022-09-23T10:40:34+09:00","","") #topicpath /////////////////////////////////////////////////////////////////////////////// * 目次 [#y5bfc779] #contents(); /////////////////////////////////////////////////////////////////////////////// * xargs [#d0453ed2] //============================================================================= ** option [#yf29a873] /////////////////////////////////////////////////////////////////////////////// * 複数コマンドを実行する [#rd903c74] - <command> の結果を、<command1> に渡して実行し、その後 <command2> に渡して実行する $ <command> | xargs -I {} sh -c '<command1> {}; <command2> {}' -- sh は bash でも、同じオプションをサポートしているなら他の如何なる shell でも良い。 -- sh は bash でもOK。同じオプションをサポートしているなら他の如何なる shell でも良い。 -- オプション -c <string> は、文字列 <string> からコマンドを読み込む sh のオプション。このオプションは bash でもサポートされている。 /////////////////////////////////////////////////////////////////////////////// * パラレル実行 [#ece2198b] - <command> の結果を引数とし、<command2> を <thread-num> 個のスレッドでパラレル実行する $ <command> | xargs -I {} -P <thread-num> <command2> {} /////////////////////////////////////////////////////////////////////////////// * 標準入力から受け取った文字列を1個づつコマンドに渡す [#ba8d17ea] //============================================================================= ** -n1 を使う [#y32ffec4] - -I オプションを併用する必要がなければ、 -n1 を指定するだけで済む //============================================================================= ** -n1 が使えない場合 [#u85f8000] - -I オプションは、空白文字を区切り文字として認識せず、コマンドに全て渡してしまう。この場合、空白文字を改行に書き換えてから xargs に渡す。 # 例: DB ファイルを sqlite3 コマンドに渡す。 data_bases=( aaa.sqlite bbb.sqlite ccc.sqlite ddd.sqlite ) echo ${data_bases[@]} | tr ' ' '\n' | xargs -I {} sh -c "sqlite3 {} vacuum; sqlite3 {} reindex";