Bash
防止終端顯示以前執行的命令
我有一個腳本,可以讓我在處理項目時記錄隨機想法。在終端中,我將通過執行添加一個新的日誌條目
$ @ "some random thought"
where
@
只是我的腳本的別名。假設我的終端處於這種狀態:
$ ls /var/tmp somefile.ext another-file.l $ _
執行我的腳本後,它看起來像這樣:
$ ls /var/tmp somefile.ext another-file.l $ @ "some random thought" $ _
現在,我不希望那行 (
$ @ "some random thought"
) 在我輸入後留在螢幕上。我只希望腳本執行並且在螢幕上不留下任何痕跡(有些事情是個人的,有些人可能會看到我的終端)。我也不想clear
整個螢幕。你認為這可能嗎?如果這有幫助,我正在使用Iterm2 。
注意:我知道如何處理
history
,這樣它就不會記錄我的日誌條目。我只想在螢幕上不留痕跡。
您可以為此定義一個小元件,而不是使用命令輸入您的想法。在
zsh
:thought() { print -r -- $BUFFER >> ~/.thoughts # or: your-script $BUFFER BUFFER= zle -M 'thought recorded' } zle -N thought bindkey '^T' thought
然後按
Ctrl-T
將緩衝區的內容添加到您的~/.thoughts
文件中,然後將其清除 (BUFFER=
)。然後,您不必擔心引用。另一種方法是使用互動式評論:
setopt interactive_comments alias '@=:;#' preexec() { [[ $1 = @* ]] && { print -r -- ${1#* } >> ~/.thoughts # or: your-script ${1#* } echoti cuu1 } }
同樣,引用沒有問題,但這僅適用於單行思想。(
echoti cuu1
通過向上移動游標來清除該行)。
警告,這是一個可怕的、可怕的 hack(但是,整個請求有點像 hack)。:)
這是適用於大多數終端的東西,包括腦殘的 MS-DOS ‘ANSI.SYS’ 模擬器。當然,不會在啞終端上工作(但什麼都不會):
tput sc echo "This will be hidden." sleep 5 tput rc; tput cuu 1; tput ed
顯然,這是一個例子。擺脫
echo
andsleep
並用您的命令替換它。以下是它的工作原理:
tput sc
保存游標在螢幕上的目前座標,tput rc
將游標移回儲存的座標。現在,螢幕可能已經滾動,所以敏感的東西會在保存的上面一行。所以,tput cuu 1
將游標向上移動一行。(如果您覺得特別偏執,請隨意增加數字。- 最後,
tput ed
清除到螢幕末尾(即從游標清除到行尾,然後從游標清除到螢幕底部)。如果螢幕滾動很多,這將失敗,因為
sc
不知道滾動,只知道螢幕座標。
tput
與終端無關,因此只要您的特定終端列在 terminfo 數據庫中並且TERM
變數設置正確,它就可以工作。