通常在UNIX系统上,可以通过将STDIN和/或STDERRredirect到文件或/ dev / null来禁止命令输出。 但是,如果您需要通过STDIN在bash脚本中将内容传递给pipe道命令?
下面的例子应该明确是什么意思。 这仅仅是一个例子,我不是在寻找一个特定的解决scheme,而是通常的这种情况。 令人遗憾的是,在很多情况下,您希望在脚本中压缩输出,但是当命令没有切换来以其他方式提交信息时,需要通过STDIN传递内容。
我的“问题”是我编写了一个函数来执行具有适当error handling的命令,并且我想将执行的命令产生的所有输出redirect到日志文件。
示例问题:
[18:25:35] [V] root@vbox:~# echo 'test' |read -p 'Test Output' TMP &>/dev/null [18:25:36] [V] root@vbox:~# echo $TMP [18:25:36] [V] root@vbox:~#
任何想法如何解决我的问题?
user000001说的是bash管道中的所有命令都是在子shell中执行的。 所以,当处理read
命令的subshell退出时,$ TMP变量也会消失。 你必须考虑到这一点,并且:
在同一个子shell中使用变量做所有的工作
echo test | { read value; echo subshell $value; }; echo parent $value
使用不同的外壳
$ ksh -c 'echo test | { read value; echo subshell $value; }; echo parent $value' subshell test parent test