我在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
中。我在这里想念什么?
答案 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上都对我有用。