1行に同じパラメータを使用して2つのコマンドを実行します。

1行に同じパラメータを使用して2つのコマンドを実行します。

ファイルを1行ずつ解析し、その中の値をFreeBSDの2つのコマンドに渡す必要がありますsh(他のシェルは使用できません)。

私の計画は以下を使用することxargsですsu

whatever_outputs_values | xargs -I {} su `whoami` -c "cmd1 {}; cmd2 {}"

FreeBSDでは、su同じユーザーにパスワードは必要ありません。これは遅いですが、端末で正しく動作し、正しい結果が得られます。ただし、プログラムコードで実行する必要がありますが、コマンドは中断されます。私はSSHライブラリが私が見ることができない状況のためにパスワードが入力されるのを待つので、動作が中断されると99%確信しています。だから私はsu whoamiパスワードを待たないことを保証するための選択肢を探しています。おそらくループかもしれませんが、forLinuxの背景ではワークループをbash設計することはできません。forsh

答え1

しかし、私はsuこれを使用しませんsh -c。これにより移植性が向上し、おそらく少し速くなります。また、左側にコマンドの出力を注入しないようにします。コードで右側にシェルコマンドを入力してください(コード注入の脆弱性です)。

some-command | xargs -I {} sh -c 'cmd1 "$1"; cmd2 "$1"' sh {}

sh -cこれは毎回1つのパラメータを使用してインラインスクリプトを複数回呼び出します。このパラメータはおよびをcmd1呼び出すために使用されますcmd2

このパラメータは、インラインスクリプト内にsh渡される「ダミー」パラメータです。$0これはスクリプトまたはシェルの名前でなければならず、シェルによって生成されたエラーメッセージ(コマンドが見つからない場合など)に使用されます。

関連情報