我想做的是以下内容:
stdin入变量AAA,而不会失去定界符符号(\n,\r,\t等)到另一个命令目前的问题是,我无法用read命令读取它,因为它停止在换行时读取.
我可以读取stdin cat,像这样:
my_var=`cat /dev/stdin`
Run Code Online (Sandbox Code Playgroud)
,但后来我不知道如何打印它.因此换行符,制表符和其他分隔符仍然存在.
我的示例脚本如下所示:
#!/usr/local/bin/bash
A=`cat /dev/stdin`
if [ ${#A} -eq 0 ]; then
exit 0
else
cat ${A} | /usr/local/sbin/nextcommand
fi
Run Code Online (Sandbox Code Playgroud) 我在bash中使用了几个命令的管道.如果其中一个命令失败,有没有办法配置bash立即终止整个管道中的所有命令?
在我的例子中,第一个命令command1运行一段时间直到产生一些输出.您可以替代command1的(sleep 5 && echo "Hello"),例如.
现在,command1 | false确实在5秒后失败但不是立即失败.
此行为似乎与命令生成的输出量有关.例如,find / | false立即返回.
一般来说,我想知道为什么bash表现得像这样.任何人都可以想象任何情况下,像这样的代码command1 | non-existing-command不会立即退出吗?
PS:使用临时文件对我来说不是一个选项,因为我管道的中间结果很大,无法存储.
PPS:似乎set -e也set -o pipefail没有影响这种现象.