命令中的Bash重定向

时间:2010-11-01 17:24:43

标签: bash

为什么Bash为这两个命令产生两个不同的输出:

$ echo $(tput cols 2>/dev/null)
80
$ echo $(tput cols)
141

PS。扩展您的终端以拥有超过80列(大多数shell默认为80)。

2 个答案:

答案 0 :(得分:5)

这似乎是因为stdout和stderr都被重定向,所以tput不知道你想要信息的终端。

$ tput cols >out; cat out       # works because stderr is still the terminal
118
$ tput cols 2>err               # works because stdout is still the terminal
118
$ tput cols >out 2>err; cat out # lost track of the terminal, going with default
80

请注意,在您的示例中,stdout由$()隐式重定向。

答案 1 :(得分:1)

解决此问题的方法是

$ max_width=`stty -a | sed -n '/columns/s/.*columns \([^;]*\);.*/\1/p' 2>/dev/null`
stty是做你想做的更好的方法!