В ударе это отобразит текущую подсказку/команду наверху и ее вывод ниже, но без прокрутки или предыдущих команд:
PROMPT_COMMAND='tput cup 0 0; tput el; tput el1'
Эта функция поместит предыдущие команды ниже, но необходимо передать каждую команду по каналу к ней индивидуально. К сожалению, exec > >(f)
не может помочь с этим, поскольку это перенаправляет весь удар, не отдельные команды. Вот функция:
f () { tee ~/.STDIN | wc -l | xargs expr 1 + | xargs tput il && cat ~/.STDIN; }
Затем выполните каждую команду как:
command args |f
Это сохраняет вывод, создает много пустых строк, равных length+1, затем откладывает вывод в. Можно наклеить строку в конце, который отобразит поддельное быстрое или горизонтальное правило, если Вам нравится. Например.
printf '%*s' $COLUMNS | tr ' ' _;
Как дерьмо, но автоматическая альтернатива этой целой функциональной вещи, мы можем добавить команду в конец нашего более раннего $PROMPT_COMMAND, который очищает несколько произвольные 11 строки:
PROMPT_COMMAND='tput cup 0 0; tput el; tput el1; tput il 11'
Можно также использовать tput -S
избегать нескольких двоичных вызовов.
Я добрался $PROMPT_COMMAND
от https://github.com/swirepe/alwaysontop.
Быстрый и грязный способ добиться желаемого — использовать rlwrap
с параметром --remember
(или -r
):
-r, --remember
Put all words seen on in- and output on the completion list.
После запуска sqlite
с помощью:
$ rlwrap -r sqlite database.sqlite
заставить sqlite
распечатать все имена таблиц и полей, выполнив метакоманду .fullschema
(или, еще меньше набрав, поместите эту команду в файл init
, а затем запустите rlwrap -r sqlite -init init database.sqlite
)
После этого вы сможете автозаполнять эти имена с помощью Клавиша TAB.