「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) を使用してスクリプトを呼び出し、スクリプトが実行される前に画面をクリアしたいということですね。

これには 2 つの方法があります。

  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、画面をクリアしてから前のコマンドを再実行します。

これで質問の答えが見つからない場合は、何を求めているかをもっと正確に伝える必要があります。

関連情報