将标准输入/输出重定向到替代命令
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
.
的参数
我正在尝试运行一个命令,可以简化为这个结构:
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
.