command | tee >(var="$(command1)") >(var1="$(command2)")
echo "$var $var1"
また、moreutils peeを試しました。
command | pee 'var="$(command)"' 'var1="$(command2)"'
また、エクスポートコマンドを試しました。 tee >(export var="$(command1)") >(var1="$(command2)")
質問1 私の必要性は、1つのコマンドの出力を使用し、それを複数のコマンドの入力として使用することです。
質問2
function() { Array=("$1"); }
function String
上記の作品
command | parallel -I %% function %%
上記で動作しない配列が設定されていない場合、回避策はありますか?助けてください。
コマンド出力:
1 word
2 word
3 word
4 word
1 string
2 string
3 string
4 string
2つの連想配列をどのように設定しますか? 1つは単語で、もう1つはパイプ出力の文字列に設定しますか?配列1[1]=ワード配列1[2]=ワード
配列2[1]=文字列配列2[2]=文字列
ベストアンサー1
@theyが述べたように、プロセスの置き換えはサブシェルで実行されるため、その割り当てはデフォルトのシェルには表示されません。pee
同様で、parallel
少なくとも後者はエクスポートされた関数を使用できますが、まだコードを実行する別のシェルを起動します。
一時ファイルを使用することもできます結果回避策として、入力データが結果より長い場合は、この方法が役に立ちます。たとえば、
seq 10 | tee >(wc -l > lines) >(wc -c > chars) > /dev/null
lines=$(< lines)
chars=$(< chars)
または多分
tmp1=$(mktemp)
tmp2=$(mktemp)
seq 10 | tee >(wc -l > "$tmp1") >(wc -c > "$tmp2") > /dev/null
lines=$(< "$tmp1")
chars=$(< "$tmp2")
rm -f "$tmp1" "$tmp2"