подобный rlwrap инструмент с автозавершением команды

В ударе это отобразит текущую подсказку/команду наверху и ее вывод ниже, но без прокрутки или предыдущих команд:

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.

3
17.06.2014, 14:51
1 ответ

Быстрый и грязный способ добиться желаемого — использовать 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.

3
27.01.2020, 21:23

Теги

Похожие вопросы