如何安全地抑制命令输出?

时间:2015-09-24 16:48:26

标签: linux bash function output

通常在unix系统上,您可以通过将STDIN和/或STDERR重定向到文件或/ dev / null来抑制命令输出。但是,如果你需要在bash脚本中通过STDIN将内容传递给管道命令呢?

以下示例应明确其含义。不过,这只是一个例子 - 我并没有特定地寻找这个命令的解决方案,而是针对这种情况。遗憾的是,有很多情况下你想要在脚本中抑制输出,但是当命令没有切换到以其他方式提交信息时,需要通过STDIN传递内容。

我的问题"是我编写了一个函数来执行具有正确错误处理的命令,并且我希望将执行的命令产生的所有输出重定向到日志文件。

示例问题:

[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:~# 

关于如何解决我的问题的任何想法?

1 个答案:

答案 0 :(得分:4)

user000001所说的是bash管道中的所有命令都在子shell中执行。因此,当处理read命令的子shell退出时,$ TMP变量也会消失。您必须考虑到这一点,并且:

  1. 避免使用子弹(上面评论中给出的例子)
  2. 使用相同子shell中的变量完成所有工作

    echo test | { read value; echo subshell $value; }; echo parent $value
    
  3. 使用不同的shell

    $ ksh -c 'echo test | { read value; echo subshell $value; }; echo parent $value'
    subshell test
    parent test