每当某些命令生成长行作为输出时(例如,当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 而不换行。
本文经过了大量编辑,向评论者致歉。