默认情况下,ls在多列中显示其输出,但是当它被发送到寻呼机时,例如less它被重新格式化为单列。有什么方法可以分页原始的多列输出并保留格式?
有两种选择
Run Code Online (Sandbox Code Playgroud)-C list entries by columns -x list entries by lines instead of by columns
第一个显示列中的输出,其中每一列都在前面(从排序的角度来看):
enzotib@acer:tmp$ touch {10..99}
enzotib@acer:tmp$ ls -C | less
10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95
11 16 21 26 31 36 41 46 51 56 61 66 71 76 81 86 91 96
12 17 22 27 32 37 42 47 52 57 62 67 72 77 82 87 92 97
13 18 23 28 33 38 43 48 53 58 63 68 73 78 83 88 93 98
14 19 24 29 34 39 44 49 54 59 64 69 74 79 84 89 94 99
Run Code Online (Sandbox Code Playgroud)
第二个选项将第一个元素放在第一行,然后放在第二行,依此类推:
enzotib@acer:tmp$ ls -x | less
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99
Run Code Online (Sandbox Code Playgroud)
当管道到寻呼机时,不考虑终端宽度和颜色格式ls。要强制执行此操作,您可以这样做
ls -Cw $COLUMNS --color | less -r
Run Code Online (Sandbox Code Playgroud)
其中-r选项 toless需要正确解释 ANSI 颜色序列。
将此行放入脚本中不起作用,因为COLUMNS未导出到子shell。可以使用两种解决方法
export COLUMNS 在你的 ~/.bashrc
将该行实现为函数或别名 ~/.bashrc
myls() {
ls -Cw $COLUMNS --color "$@" | less -r
}
Run Code Online (Sandbox Code Playgroud)