ファイルを1行ずつ解析し、その中の値をFreeBSDの2つのコマンドに渡す必要がありますsh
(他のシェルは使用できません)。
私の計画は以下を使用することxargs
ですsu
。
whatever_outputs_values | xargs -I {} su `whoami` -c "cmd1 {}; cmd2 {}"
FreeBSDでは、su
同じユーザーにパスワードは必要ありません。これは遅いですが、端末で正しく動作し、正しい結果が得られます。ただし、プログラムコードで実行する必要がありますが、コマンドは中断されます。私はSSHライブラリが私が見ることができない状況のためにパスワードが入力されるのを待つので、動作が中断されると99%確信しています。だから私はsu
whoami
パスワードを待たないことを保証するための選択肢を探しています。おそらくループかもしれませんが、for
Linuxの背景ではワークループをbash
設計することはできません。for
sh
答え1
しかし、私はsu
これを使用しませんsh -c
。これにより移植性が向上し、おそらく少し速くなります。また、左側にコマンドの出力を注入しないようにします。コードで右側にシェルコマンドを入力してください(コード注入の脆弱性です)。
some-command | xargs -I {} sh -c 'cmd1 "$1"; cmd2 "$1"' sh {}
sh -c
これは毎回1つのパラメータを使用してインラインスクリプトを複数回呼び出します。このパラメータはおよびをcmd1
呼び出すために使用されますcmd2
。
このパラメータは、インラインスクリプト内にsh
渡される「ダミー」パラメータです。$0
これはスクリプトまたはシェルの名前でなければならず、シェルによって生成されたエラーメッセージ(コマンドが見つからない場合など)に使用されます。