web-dev-qa-db-ja.com

画面の一番上の行にbash入力を保持する

bashコマンドプロンプトの入力を画面上部に保持して、古いコマンドからの出力が上方向ではなく下方向にプッシュされるようにしたいと思います。

どうすればこれを達成できますか?

12
Tom Price

これらの行を.bashrcに追加します。

Prompt_on_top() {
  tput cup 0 0
  tput el
  tput el1
}

pre_cmd() {
  if [ "$BASH_COMMAND" = "$Prompt_COMMAND" ] || [ -n "$COMP_LINE" ]; then
    return
  fi
  printf "\33[2J"
}

Prompt_COMMAND="Prompt_on_top"
trap 'pre_cmd' DEBUG

bash have Prompt_COMMAND 、これは、コマンドがbash show Promptの前に実行されることを保持します。ここでは、関数Prompt_on_topに設定します。これは tput を使用して、画面の上部にカーソルを設定します。

bashには、コマンドを実行する前にコマンドを実行する方法もあります。 trap を使用して、信号DEBUGを処理します。ここでは、これを関数pre_cmdに設定します。これにより、古い画面がクリアされ、完了( COMP_LINE が空でない)した場合、またはBASH_Promptでコマンドを実行した場合は何も行われません。


このアプローチには制限があります。コマンド出力が長すぎて画面に収まらない場合、出力はPrompt_on_topアクションによってオーバーライドされます。この場合、出力全体を読み取るために、出力をページャーにパイプする必要があります。

7
cuonglm