我正在尝试运行一个命令,可以简化为这种结构:
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//')
命令不会终止。
我在这里做错了什么?
答案 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
参数的输出。