gpt4 book ai didi

shell - 根据长度将命令的输出通过管道传输到 less 或 cat 中

转载 作者:行者123 更新时间:2023-12-04 14:52:58 25 4
gpt4 key购买 nike

首先,让我声明这是一个编程问题(因此不属于 super 用户等人),因为我说的是 shell 编程。这几乎可能是一个高尔夫问题,但我没有答案开始,所以任何帮助将不胜感激:-)

所以,故事是:我喜欢把东西用管道输送到 less--quit-if-one-screen选择,因为它很舒服:less不必要时不会妨碍我。或者是吗?当我的提示已经在终端窗口的底部时,这个选项完全符合我的要求(即 less 的行为类似于 cat )。但是,当我当前的提示位于窗口顶部时,less首先打印大量空白行以清除屏幕,然后在屏幕底部打印出我的(短)文件,然后才意识到文本少于一个屏幕,因此它退出并且我得到提示。

但是这种行为并不好,因为所有这些无用的空行。我尝试了不同的选项,或者编写了脚本和别名,我能想到的最好的就是这个(我使用的是 zsh,所以 shell 已经能够复制管道等等):

function catless() {
cat \
>>( bucket -$LINES | cat ) \
>>( bucket +$LINES | less )
}

哪里 bucket是我刚写的另一个脚本,如果标准输入少于 N 行(使用 -N)或多于 N(使用 +N),它会将标准输入复制到标准输出。
我把它贴在这里: http://snipt.net/Gyom/copy-stdin-to-stdout-or-not-depending-on-length

ls | catless几乎有效。但是,出于同步的原因,这里涉及的不同进程无法正确访问终端,一切都在后台执行(特别是,我从来没有在这里得到正确的 less,而且提示很快回来)。但也许我走错了路。

所以,总而言之,我想要的是这样一个函数/脚本/任何我可以输入的东西 ls | catless它的行为与 ls | cat 完全一样当 ls 的输出比一个屏幕还短,比如 ls | less当更长。

有任何想法吗 ?

最佳答案

-X标志可能会帮助你(来自less(1)):

  -X or --no-init
Disables sending the termcap initialization and deinitialization
strings to the terminal. This is sometimes desirable if the
deinitialization string does something unnecessary, like
clearing the screen.


所以,以下应该做你想做的:
export LESS="-E -X"

或者,由于您喜欢 --quit-if-one-screen,您可以改为:
export LESS="-F -X"

关于shell - 根据长度将命令的输出通过管道传输到 less 或 cat 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1566528/

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