Bash 命令替换未按预期工作

Bash 命令替换未按预期工作

我想查看文件的最后几行,但我希望列对齐。基本上,我想禁用自动换行。

这很简单:

tail $FILE | cut -c -80

但我正在尝试将我的脚本推广到其他用户,并且我想剪切到实际的终端宽度,我可以通过以下方式获得:

stty size | cut -d" " -f2

所以我想我可以

tail $FILE | cut -c -`stty size | cut -d" " -f2`

但它不起作用:

stty: standard input: Invalid argument
cut: invalid range with no endpoint: -
Try `cut --help' for more information.

(与“new”$() 扩展的结果相同。)

现在,如果我回应它,​​它看起来不错:

echo cut -c -`stty size | cut -d" " -f2`
cut -c -103

我是不是漏了一个转义符?还是说这根本就不可能?

谢谢。

答案1

它不起作用的原因是stty它在管道内执行。因此它“看不到”底层终端。在您的脚本中,您可以将终端宽度存储在变量中,例如

size=`stty size | cut -d" " -f2`

然后使用它:

tail $FILE | cut -c -$size

答案2

Bash 在变量中维护屏幕宽度COLUMNS,您可以在管道中使用该变量:

tail $FILE | cut -c -$COLUMNS

相关内容