程序 less、more 或 vi 是如何在终端屏幕上添加滚动部分而不清除屏幕的,之后它是如何消失的?
如果我从脚本或脚本退出的方式运行它,有没有办法在特定的时间内运行更少?
如果我这样做less somefile.txt或man bash(内部使用less),它会显示内容,但按后Q,内容消失。
git diff也使用less,但输出保留在控制台中。我怎样才能使git行为与 相同man?
目前的行为
me@mypc:~$ git diff
# I look at the diff and then press q. But it's all printed to the console
diff --git a/somefile.txt b/somefile.txt
...
...
...
me@mypc:~$
me@mypc:~$ less somefile.txt
# I look at the file content, but after I press q, console appears and nothing is printed there
me@mypc:~$
Run Code Online (Sandbox Code Playgroud)
我意识到 git 的行为就像less -X,那么如果没有这个选项,我如何强制 git …
我在 OS X 10.6 上使用 R 并且我更喜欢 unix 控制台而不是 R.app 来工作。如果我发出了一个help命令,例如?print帮助内容通过寻呼机(我试图打开most和less),然而这则掩藏起来的内容,如果我退出它把我带回了R输入线。
我真正想要的是,即使在我将其退出回 R(点击q)后,寻呼机输出仍会保留在屏幕上。
我在其他基于 Readline 的 Cli 上得到了这种期望的行为psql,例如,但不是在 R 上。有关如何配置的任何提示将不胜感激。
如果我想在程序的输出超过屏幕上的行数时清除屏幕并减少运行,我可以执行以下操作:
mypgm | tee mypgm.out
LEN=$(wc -l mypgm.out | cut -f1 -d' ')
[[ $LEN >= $LINES ]]; then
clear
less -R mypgm.out
fi
Run Code Online (Sandbox Code Playgroud)
只要输出中的任何行都没有环绕,它就可以正常工作,视觉上在屏幕上占据了不止一行。有没有一种简单的方法可以确定输出在视觉上占据了多少行,或者我是否必须循环输出文件,使用 $COLUMNS 计算长行需要显示的“行”数
在 Zsh 中与 iTerm2 一起使用less类似命令,例如运行git log --graph -n 3、git stash list或less README.md,将输出放在单独的视图中。我希望行为更像cat输出停留在主窗口中的位置。例如,当我使用时git log,我希望能够引用我刚刚看到的提交哈希值。
我在 OSX 机器上有一个相当默认的 git 设置,但我想将-j.5添加到less,以便搜索匹配发生在屏幕中间。
我尝试这样做export LESS=-j.5,但这导致内容喜欢ESC[1mdiff --git a/app/images/bluecog-icon.png b/app/images/bluecog-icon.pngESC[m出现,即使事先echo $LESS给出了一个空的结果。我查了一下,git help diff但它没有提到“pager”,也没有提到“less”指的是 unix 工具(而不是“greater”的反义词)。
修改环境变量或传递参数git diff都是可以接受的。我知道我可以-j.5在 git diff 本身内输入。
请原谅我毫无用处cat,而且是echo预先的,但是当less在 ~2GB .gz 文件上运行时,我看到 ~25GB 的 RAM 被消耗(尽管输出被通过管道传输到 awk 并在那里消耗):
[user@mybox:~]$ cat <(echo '173abcde7665559.90651926
131abcde7298936.49040546
... (25 lines total here) ...
186abcde4858463.43044639
163abcde9409643.80726489'|awk '{print "KEY 1"length($1)-16":"$1}';
less /tmp/stats.gz)|awk '{if("KEY"==$1){K[$2]=1}else{if($8 in K)print}}' >bad25&
Run Code Online (Sandbox Code Playgroud)
我预计上面的内容不需要 RAM 就能完成,但令我惊讶的是,大约 2.5 小时后(当时读取 .gz 的进度已达到 89.8%):
[user@mybox:~]$ ps auxf|grep -e 'pts/2' -e PID |grep -v grep
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
user 26896 0.0 0.0 68356 1580 pts/2 Ss+ 15:23 0:00 \_ /bin/bash
user …Run Code Online (Sandbox Code Playgroud)