Додайте ці рядки до своїх .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мати PROMPT_COMMAND , який утримує команду, буде виконано перед тим, як з'явиться bashзапит. Тут ми встановили його на функцію prompt_on_top, яка використовує tput для встановлення курсору у верхній частині екрана.
bashтакож є спосіб виконати команду перед виконанням будь-якої команди, використовуючи пастку для обробки сигналу DEBUG. Тут ми встановимо його на функцію pre_cmd, яка очистить старий екран, і нічого не зробимо, якщо ми виконали завершення ( COMP_LINE не порожній) або запустимо команду в BASH_PROMPT.
При такому підході є обмеження, якщо вихід команди занадто довгий занадто довгий на екрані, то вихід буде переопрацьований за prompt_on_topдією. У цьому випадку вам потрібно передати висновок пейджеру, щоб прочитати весь вихід.
catфайл, це було б змінити порядок?