一個命令完成時不清除分屏區域
我並行執行一些命令,我想在所有命令完成後查看它們的最後輸出(在我的終端模擬器的回滾中)。這是我的測試腳本
test.screen
:# screen -t A sh -c 'echo important info && sleep 2' split focus # screen -t B sh -c 'echo another important info && sleep 5'
啟動命令:
$ screen -c test.screen
輸出:
[screen is terminating] [il@reallin ~]$ -- another important info 1 B
一個問題是:當第一個
sleep 2
完成時,列印的消息important info
被刪除。如果我zombie kr
在開頭添加,則螢幕根本不會退出。作為一種解決方法,呼叫者可以等待所有螢幕程序退出,然後發出-X quit
另一個問題:退出時插入符號不會移動到底部,
screen
並且 shell 提示符會覆蓋一些數據。解決方法是echo
$LINES 次。
清除分屏區域沒有好的解決方案:殭屍視窗阻止螢幕退出。我必須在視窗和呼叫者腳本之間添加額外的同步,當它們都死掉時,我會
screen -X quit
顯式呼叫。該
altscreen
命令與此無關。游標沒有移動到底部,因為我的預設設置/etc/screenrc
是半工作:使用了主機終端 altscreen 功能,但在切換回來之前沒有清除 altscreen。為了使其預設工作,我/etc/screenrc
從複製CentOS 7
並在我的情況下完全禁用了該功能termcapinfo * ti=:te=
。test.sh:
#!/bin/bash # set -e if [ "a" = "$1" ]; then # decrement file name towards zero, then kill screen set -e a=-1 cd "$COUNTERDIR" while true; do for old in *; do new=$((old + a)) done [ 0 -eq "$a" ] || 2>/dev/null mv ./$old ./$new && break done if [ 0 -eq "$new" ]; then screen -X quit fi exit fi NWINDOWS=2 COUNTERDIR=`mktemp -d` touch "$COUNTERDIR/$NWINDOWS" export COUNTERDIR screen -c test.screen rm -rf "$COUNTERDIR"
測試螢幕:
# do not use host terminal altscreen feature termcapinfo * ti=:te= # windows stay after command terminates zombie kr screen -t A sh -c 'for ((i=0; i<100; i++)); do echo important info $i; done && sleep 5; ./test.sh a' split focus screen -t B sh -c 'for ((i=0; i<100; i++)); do echo another important info $i; done && sleep 2; ./test.sh a'
如果您不想在退出“螢幕”時清除螢幕,您應該選擇(或修改)不切換到備用螢幕的終端描述。那就是外面
TERM
的價值。screen
使用 xterm(以及其他一些,如 PuTTY),您可以配置終端以防止使用備用螢幕,但對於大多數複製 xterm 的備用螢幕功能的終端,這是硬編碼的,不可配置。所以終端描述是開始的地方。
ncurses 提供了一個終端描述“xterm1”,它抑制了備用螢幕(並且看到它在 Debian 中,它可能在派生髮行版中,例如 Ubuntu)。對於其他系統,這取決於。這是與 infocmp 的區別:
comparing xterm1 to xterm. comparing booleans. comparing numbers. comparing strings. rmcup: NULL, '\E[?1049l'. smcup: NULL, '\E[?1049h'.
“螢幕”程序也有自己的備用螢幕變體,通常是關閉的:
altscreen on|off If set to on, "alternate screen" support is enabled in virtual termi‐ nals, just like in xterm. Initial setting is `off'.
進一步閱讀: