[解決済み】xargsで複数のコマンドを実行する
2022-03-24 07:02:49
質問
cat a.txt | xargs -I % echo %
上の例では、xargsは
echo %
をコマンドの引数として指定します。しかし、場合によっては、引数を処理するコマンドを1つではなく、複数必要とすることがある。例えば
cat a.txt | xargs -I % {command1; command2; ... }
しかし、xargsはこの形式を受け付けない。私が知っている解決策の一つは、コマンドをラップする関数を定義することですが、それは複雑なので避けたいのです。もっといい解決策はないでしょうか?
どのように解決するのですか?
cat a.txt | xargs -d $'\n' sh -c 'for arg do command1 "$arg"; command2 "$arg"; ...; done' _
...または 猫の無駄遣い :
<a.txt xargs -d $'\n' sh -c 'for arg do command1 "$arg"; command2 "$arg"; ...; done' _
細かい点を説明すると
-
の使用は
"$arg"
の代わりに%
(がないこと(そして-I
の中にxargs
コマンドライン)は、セキュリティ上の理由からです。でのデータの受け渡しはsh
のコマンドライン引数リストをコードに代入するのではなく、データに含まれる可能性のあるコンテンツ(例えば$(rm -rf ~)
特に悪意のある例では、コードとして実行されないようにする。 -
同様に
-d $'\n'
はGNU拡張機能であり、これによりxargs
は、入力ファイルの各行を個別のデータ項目として扱います。これか-0
(は、xargs がシェルのような(しかし とは言えない シェルと互換性のある) 構文解析を読み込むストリームに対して行います。(GNU xargs を持っていない場合はtr '\n' '\0' <a.txt | xargs -0 ...
を使用せずに行指向の読み込みを行うには-d
). -
は
_
はプレースホルダーで$0
によって追加される他のデータ値は、そのようなxargs
になります。$1
などがありますが、これはたまたまデフォルトの値でfor
ループを繰り返し実行します。
関連
-
[解決済み】firebase-tools "-bash: firebase: command not found".
-
[解決済み] MacOSのbashターミナルでexport PS1="\u[\033[m]@[\033[32m]\h:\[\033[33;1m]\w[\033[m]\$" は何を意味していますか?
-
[解決済み] 値がベースに対して大きすぎる(エラートークンは "08")[重複]
-
[解決済み] bash スクリプトの "${BASH_SOURCE[0]}" と $( cd $( dirname "xxx" && pwd )) の意味について
-
[解決済み] スクリプトからのエラーメッセージを含むすべての端末出力をログファイルにパイプする方法
-
[解決済み] シェルコマンドを実行しながらエコーする方法
-
[解決済み] ターミナルで現在の行をクリア/削除するにはどうすればよいですか?
-
[解決済み] シェルスクリプトからエコーを使わずにパスワードを取得する方法
-
[解決済み] シェルで複数のコマンドを1行で実行する
-
[解決済み】xargsで入力1行ごとにコマンドを実行するようにする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】予期しないトークン 'fi' 付近の構文エラー
-
[解決済み] バッシュ Vim.NET」が表示されたらVimを終了させる Warning: 出力先が端末でない"
-
[解決済み] zip警告 - 名前が一致しない
-
[解決済み] シェルスクリプトで整数式が期待されるエラー
-
[解決済み] nohupプロセスを終了させる方法を教えてください。
-
[解決済み] bash スクリプトを実行している docker エントリポイントに "permission denied" が表示される。
-
[解決済み] bashでのDiffコマンド
-
[解決済み] ターミナルでbashスクリプトを実行するにはどうすればよいですか?
-
[解決済み】ファイルの行をコマンドの引数として使用するにはどうすればよいですか?
-
[解決済み] マルチコアを使用したg++でのコンパイル