ティープロセス置換サブシェルからグローバル変数をエクスポートする

ティープロセス置換サブシェルからグローバル変数をエクスポートする
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"

おすすめ記事