/dev/null)" 令我惊讶的是,当我运行它时,COLS 始终-6ren">
gpt4 book ai didi

bash - 奇怪的 tput 行为,带有 stderr 重定向

转载 作者:行者123 更新时间:2023-11-29 09:00:37 26 4
gpt4 key购买 nike

我正在尝试在 Bash 脚本中使用 tput,并尽力避免随机错误涌现。为此,我写了以下行:

COLS="$(tput cols 2> /dev/null)"

令我惊讶的是,当我运行它时,COLS 始终设置为 80,无论我的终端窗口的宽度是多少。 (为了演示,我的终端恰好有 115 列宽。)为了弄清楚发生了什么,我在命令行上尝试了一些东西:

$ tput cols
115
$ tput cols | cat
115
$ echo "$(tput cols)"
115
$ tput cols 2> /dev/null
115
$ echo "$(tput cols 2> /dev/null)"
80

因此,tput 似乎在重定向其 stderr 时或在将其嵌入进程替换时成功地找出终端特征,但不是两者。多么奇怪!

我在 Linux 和 OS X 上都测试过,行为是一样的。

这是怎么回事?作为一个实际问题,什么是让 tput 工作同时抑制 stderr 溢出的最佳方法?

注意:我知道 $COLUMNS。我对使用 tput 特别感兴趣。

最佳答案

快速 strace 运行表明 tput 首先尝试确定 stdout 上的终端宽度,如果失败,它会回退到标准错误。因此,在失败的情况下,两者都被重定向,并且 tput(显然)假定默认值为 80 列。

关于bash - 奇怪的 tput 行为,带有 stderr 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21763397/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com