如何让 bash 不换行输出?

如何让 bash 不换行输出?

每当某些命令生成长行作为输出时(例如,当ls -l文件夹包含长名称的文件时),长行就会换到下一行,从而弄乱列结构。

有什么方法可以避免这种情况吗?类似于 'nowrap' vim 选项的东西?


更新

我注意到接受的答案存在一个问题:
如果我创建一个别名,例如:alias ll="tput rmam; ls -l; tput smam"
然后尝试 grep 它的输出:ll | grep foo
它仍然会打印全部文件,例如没有 grep。

我发现的解决方案是将整个别名括在括号中:
alias ll="(tput rmam; ls -l; tput smam)"

答案1

请注意,这与 bash 无关(一旦您启动命令,bash 只需等待它完成)并且与终端有关。

大多数终端仿真器默认在右边距换行。但可以使用适当的控制序列,如果终端仿真器支持的话;那么长行将被截断:

printf '\033[?7l'
ls -l /a/folder/that/contains/files/with/long/names
printf '\033[?7h'

答案2

如果你希望能够进行水平滚动而不是截断行,请使用less -S

答案3

您可以使用如下函数:

nowrap() 
{ 
   cut -c-$(tput cols); 
}

但请记住,您必须在命令前加上前缀,nowrap或者用任何您喜欢的名称来命名函数。

答案4

你可以覆盖一个函数,以便它tput rmam在 grep 之前和tput smam之后自动运行:

function grep () {
  tput rmam;
  command grep "$@";
  tput smam;
}

将其放入你的.bash_profile,无论何时运行grep,它都会进行 grep 而不换行。

本文经过了大量编辑,向评论者致歉。

相关内容