コマンド出力の2行の内容を使用して、同じ名前の2つのファイルを作成します。

コマンド出力の2行の内容を使用して、同じ名前の2つのファイルを作成します。

cmd2行のテキストを実行して出力します。

$ cmd
foo
bar

これを `/long/path/x.{load,conf} に書く必要があります。

このターゲットに書き込むには、手動で操作できないスーパーユーザー権限が必要です。

$ echo "foo" > /long/path/x.load
$ echo "bar" > /long/path/x.conf

〜のように「コマンドが開始され、権限を取得する前にリダイレクトが完了します。」

これを考えると扱いにくいテキスト文字列のプレースホルダなfooので、barこれを行うには良い方法は何ですか?

実際、私は多くの頭痛を引き起こさない解決策を探しています。これは一連のガイドラインの1つのステップを表し、説明を必要としないコードを書くことをお勧めしますが、常に可能なすべての方法に興味があります。小さなことをするために。

ベストアンサー1

Awkのリダイレクト演算子はここで便利です。このトピックにはいくつかのバリエーションがあります。

cmd | sudo awk '{print >"/long/path/x." (NR==1 ? "load" : "conf")}'
cmd | sudo x=/long/path/x awk 'NR==1 {print >ENVIRON["x"]".load"}
                               NR==2 {print >ENVIRON["x"]".conf"}'
cmd | sudo awk 'FNR==1 && NR!=1 {exit} {print >ARGV[NR-1]}' -  /long/path/x.{load,conf}

最初は最も短くて簡単です。各行は、演算子の後にある式を評価することによって決定されたファイル名で印刷されます>。現在の行番号NRはファイル名を計算するために使用されます。式の連結は awk の文字列連結演算子です。

おすすめ記事