2016-11-16 5 views
1

私はこのような構造に単純化することができるコマンド、実行しようとしています:置換コマンドに標準入力/出力をリダイレクトする

echo "A,B" | cp $(sed -e 's/A,//') $(sed -e 's/,B//') 

をしかし、私は右の置換コマンドの入力/出力を取得して苦労しています。 sedの :上記のコードを実行する は、このエラーメッセージを生成し、標準入力に読み取りエラー:入力/出力エラー

私はこの代わりに実行すると:

echo "A,B" | cp <(sed -e 's/A,//') <(sed -e 's/,B//') 

コマンドが終了しません。

私はここで間違っていますか?

答えて

1

はこれを試してみてください。次に、入力上で2 sedコマンドを実行し、cpの引数に出力を使用します。

2

sedの両方のインスタンスが、標準入力(端末)の入力を待機しています。パイプはcpの標準入力に接続し、sedインスタンスのいずれにも接続しません。

は、代わりにこれを試してみてください:

read first second <<< "A,B" 
cp "${first}" "${second}" 

または、代わりに:これはサブシェルを作成し、$IN変数にSTDIN入力を保存し

echo "A,B" | (IN=$(cat); cp $(echo $IN | sed -e 's/A,//') $(echo $IN | sed -e 's/,B//')) 

var="A,B" 
cp "${var%,*}" "${var#*,}" 
+0

私は次のような仕事をしながら、1つのライナーを持っています: 1つのコマンドの出力を取り出し、複数の異なる方法で処理し、結果をさらに別のコマンドの入力パラメーターとして使用します。 'sed'が実際に入力を得ているようです: ' echo "123" | ** –

+0

両方のプロセス置換は、 'cp'が実行されているシェルからの標準入力を継承します('ので、 'cp'と' sed'の3つがパイプから読み込まれます。 'cp'は標準入力を無視するので、' sed'が最初に実行されるようにスケジュールされ、入ってくる文字列を読むことができるのはOSに任されます。 – chepner

関連する問題