将标准输入/输出重定向到替换命令

时间:2016-11-16 18:05:17

标签: linux terminal pipe zsh io-redirection

我正在尝试运行一个命令,可以简化为这种结构:

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

但我正在努力获得替代命令的输入/输出。 运行上面的代码会产生以下错误消息: sed:读取stdin错误:输入/输出错误

当我改为运行时:

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

命令不会终止。

我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

sed的两个实例都在等待标准输入的输入,这是您的终端。管道连接到cp的标准输入,而不是sed实例中的任何一个。

请改为尝试:

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

或者,或者:

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

答案 1 :(得分:1)

试试这个:

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

这将创建一个子shell并将stdin输入保存到$IN变量。然后它在输入上运行2 sed个命令,并使用cp参数的输出。