在bash中将命令输出重定向到变量和控制台同时输出不起作用。

17 浏览
0 Comments

在bash中将命令输出重定向到变量和控制台同时输出不起作用。

我有一个简单的任务要在shell脚本中完成-将命令输出重定向到一个变量以及标准输出。我已经阅读了在ksh中将命令输出重定向到变量和标准输出,并且得到了以下解决方案:\n

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

\n然而上述方法对我无效。输出可以正常显示在STDOUT上,但没有保存在VAR1中。我在这里漏掉了什么?

0
0 Comments

在bash中将命令输出重定向到变量和控制台上的问题:

问题原因:

这个问题是因为使用了错误的重定向命令。原来的命令使用了>将tee命令的输出重定向到了/dev/stderr,而正确的做法应该是使用/dev/tty或者/dev/stderr来将输出写入控制台。

解决方法:

正确的解决方法是使用以下命令:

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

或者

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

这样就可以将命令的输出保存到变量var1中,并且同时在控制台上显示输出。

需要注意的是,为了避免覆盖环境变量,建议避免使用全大写的变量名。

这两个命令在OSX和Ubuntu上都可以正常工作。

然而,如果直接将输出发送到/dev/tty,就无法将其重定向或者管道到标准输出中。

另外,有用户反馈说这个方法对于KSH和Bash都不起作用。对于这种情况,可能是因为用户在默认shell中运行命令时出现了问题。对于这种情况,需要进一步排查原因。

以上就是关于在bash中将命令输出重定向到变量和控制台的问题的原因和解决方法。通过使用正确的重定向命令,可以将命令的输出保存到变量中,并且同时在控制台上显示输出。需要注意避免使用全大写的变量名来避免覆盖环境变量。这个方法在OSX和Ubuntu上都可以正常工作,但对于其他操作系统和不同的shell可能会有不同的结果。

0
0 Comments

问题:在bash中,将命令输出重定向到变量和控制台不起作用。

原因:在tee命令上有一个不必要的重定向。tee命令的作用是将输入复制到输出,并将副本复制到作为参数给出的任何文件中。重定向仅会干扰其传递行为。

解决方法:您可以采取另一种方法——因为我们在这里不讨论长时间运行的命令——先设置变量,然后打印其值。这样会简化很多。

代码示例:

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

这样,您可以首先将命令的输出存储在变量VAR1中,然后使用echo打印出该变量的值。这样就实现了将命令输出重定向到变量和控制台的效果。

0