使用“clear”命令清除除當前行之外的整個控制台

使用“clear”命令清除除當前行之外的整個控制台

需要清除終端但保存目前行的命令。在劇本裡! (該腳本是由命令調用的。在該命令調用腳本之前,必須清除整個終端。)從歷史記錄中恢復命令是不合適的

預期使用範例:

  1. 正在建立腳本“test.sh”
  2. 我們在其中寫入一些修改後的「清除」命令:
    #!/usr/bin/env bash
    clear
    echo some text
    
  3. 申請

目前終端狀態:

在此輸入影像描述

執行“test.sh”後的目前結果:

在此輸入影像描述

問題是什麼?事實上,帶有命令的行已經消失 + vscode 不顯示帶有腳本錯誤代碼的左側複選標記。

預期結果:

在此輸入影像描述

怎麼做?

附:

問題不僅在vscode中,在其他終端機中命令也被完全刪除

在此輸入影像描述

答案1

單程

如果您需要真正的提示,您可以使用一些遊標操作,如下所示:

#!/bin/bash

# Save cursor position
printf '\033[s'
# Move the cursor up 1 line
printf '\033[1A'
# Clear the screen
printf '\033[1J'
# Restore cursor position
printf '\033[u'


echo "new thing"

如果上面的範例需要更多調整,請參閱範例ANSI 轉義序列:遊標移動並且ANSI 轉義序列對於更多這樣的人。

其他方式

如果您願意,您仍然可以使用clear,然後像這樣重新繪製提示:

#!/bin/bash

# Clear the screen
clear
# Build the prompt as it was before "clear"
line="$(printf '%s' "$USER@$HOSTNAME:$PWD$ $0")"
# For "root" prompt i.e. "#", comment out the above line and uncomment the below line
# line="$(printf '%s' "$USER@$HOSTNAME:$PWD# $0")"
# Print the prompt
echo "${line/\/home\/$USER/\~}"


echo "new thing"

或甚至像這樣:

#!/bin/bash    

clear
line="$USER@$HOSTNAME:$PWD$ "
read -t 0.01 -ei "$(echo "$0")" -p "${line/\/home\/$USER/\~}"
echo


echo "new thing"

外表是騙人的,但外表可能就是你想要的……但這並不是真正的提示。

答案2

你的問題不是很clear(諷刺的是,這是你想要使用的命令),但無論如何我都會嘗試回答。

據我了解,您使用命令調用腳本(假設它被稱為./myscript),並且希望在腳本運行之前清除螢幕。

您可以透過兩種方式做到這一點。

  1. 清空螢幕,然後執行腳本:

    $ clear; ./myscript
    
  2. clear命令作為腳本中的第一行:

     #!/bin/bash
     # Beginning of ./myscript
     clear
    
     # The rest of the script goes here
    

    然後運行腳本,這將清除螢幕,然後繼續執行其他操作:

     $ ./myscript
    

最後,如果您想要建立清除螢幕的別名,然後重新執行最後一個命令,您可以定義:

alias clrun='clear; $(fc -ln -1)'

然後運行clrun將執行以下操作:清除螢幕,然後重新運行上一個命令。

如果這不能回答您的問題,您必須更準確地表達您想要的內容。

相關內容