将命令输出重定向到bash中的变量以及控制台无法正常工作

时间:2019-06-03 11:21:11

标签: bash shell scripting

我在shell脚本中有一个简单的任务-将命令输出重定向到变量以及stdout。我已经经历过redirect command output into variable and standard output in ksh,并且想到了:

VAR1=$(ps -u "${USER}" | awk 'NR>1 {print $NF}' | tee > /proc/$$/fd/1)

但是以上内容对我不起作用。输出显示为STDOUT正常,但未保存在VAR1中。我在这里想念什么?

2 个答案:

答案 0 :(得分:2)

您对该tee命令进行不必要的重定向。使用:

VAR1=$(ps -u "${USER}" | awk 'NR>1 {print $NF}' | tee /proc/$$/fd/1)

它们tee的工作方式是将其输入复制到其输出,并复制到您将其名称用作参数的任何文件。重定向只是通过传递行为来传达消息。

您可以做些别的事情-因为我们在这里不谈论一些长时间运行的命令-首先设置变量,然后打印其值:

VAR1=$(ps -u "${USER}" | awk 'NR>1 {print $NF}' )
echo "$VAR1"

...简单得多:-)

答案 1 :(得分:1)

  

将命令输出重定向到bash中的变量以及控制台:

您可以使用此技巧:

var1=$(ps -u "${USER}" | awk 'NR>1 {print $NF}' | tee /dev/tty)

var1=$(ps -u "${USER}" | awk 'NR>1 {print $NF}' | tee /dev/stderr)

tee命令会将输出写入当前终端/dev/tty

还建议您避免使用所有大写字母的变量名,以免覆盖环境变量。

PS:这两个命令在OSX和Ubuntu上都对我有用。