Scripting
獲取 termcap 功能的終端狀態
如何檢索終端設置的狀態,如
smam
和rmam
?原因是我設置
rmam
的:tput rmam
smam
在腳本中,然後在退出時繼續設置:tput smam
但是如果終端
rmam
在腳本啟動時設置了,我不想smam
在退出時設置。如何才能做到這一點?
在支持它的終端仿真器上,您可以使用
\033[?7$p
轉義符(“請求 DEC 私有模式”)來查詢該參數(7
=> 自動換行模式):decrqm()( exec </dev/tty t=$(stty -g) trap 'stty "$t"; return' EXIT QUIT INT TERM stty -icanon -echo time 1 min 0 e=$(printf '\033') printf "${e}[$1\$p" >/dev/tty case $(dd count=1 2>/dev/null) in "${e}[$1;1\$y") echo on;; "${e}[$1;2\$y") echo off;; *) echo unknown;; esac ) $ tput smam # printf '\033[?7h' $ decrqm '?7' on $ tput rmam # printf '\033[?7l' $ decrqm '?7' off
更好的方法是在啟動腳本時保存該設置,
\033[?7s
並在退出時恢復\033[?7r
它:save_am(){ printf '\033[?7s'; } restore_am(){ printf '\033[?7r'; } save_am tput rmam .. restore_am
但是許多終端仿真器(尤其是
screen
andtmux
)不支持這些轉義。至少預設情況下不是。所以這一切都是純粹的瑣事——你不能將它用於任何實際的事情;-)