为什么Bash为这两个命令产生两个不同的输出:
$ echo $(tput cols 2>/dev/null)
80
$ echo $(tput cols)
141
PS。扩展您的终端以拥有超过80列(大多数shell默认为80)。
答案 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是做你想做的更好的方法!