Очистить всю консоль, КРОМЕ текущей строки, с помощью команды «clear»

Очистить всю консоль, КРОМЕ текущей строки, с помощью команды «clear»

Необходимость очистки терминала, но сохранение текущей строки с командой. В скрипте! (Скрипт вызывается командой. Необходимо очистить весь терминал ДО этой команды, которая вызывает скрипт.) Восстановление команды из истории не подходит

Пример ожидаемого использования:

  1. Создается скрипт "test.sh"
  2. Записываем в него какую-нибудь модифицированную команду «clear»:
    #!/usr/bin/env bash
    clear
    echo some text
    
  3. Применять

Текущее состояние терминала:

введите описание изображения здесь

Текущий результат после запуска «test.sh»:

введите описание изображения здесь

В чем проблема? В том, что пропала строка с командой + vscode не отображает левую галочку с кодом ошибки скрипта.

Ожидаемый результат:

введите описание изображения здесь

Как это сделать?

P.S.:

Проблема не только в 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"

Если приведенный выше пример требует доработки, см. примерEscape-последовательности ANSI: перемещение курсораа такжеEscape-последовательности 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выполнит именно это: очистит экран, а затем повторно выполнит предыдущую команду.

Если это не ответ на ваш вопрос, вам следует гораздо точнее сформулировать свои пожелания.

Связанный контент