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

Redirecting standard input / output to substituted command

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

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

但我正在努力让替换命令的输入/输出正确。 运行 上面的代码产生了这个错误信息: sed:标准输入读取错误:Input/output错误

当我 运行 改为:

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

命令没有终止。

我做错了什么?

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

试试这个:

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

或者,或者:

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

试试这个:

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

这将创建一个子 shell 并将标准输入保存到 $IN 变量。然后它在输入上运行 2 sed 命令并使用输出作为 cp.

的参数