Если вы нажмете Ctrl+L
, он будет частично делать то, что вы хотите. Он будет перерисовывать текущую строку, включая все, что вы набрали до этой точки, включая позицию курсора, но он очистит экран, поэтому ваш предыдущий вывод будет потерян (или в случае окна терминала в буфере прокрутки). С другой стороны, вы хотели попробовать clear
, так что, возможно, это не проблема.
Есть ли команда, чтобы заставить bash напечатать новую строку приглашения и перерисовать текущую строку?
Вместо того чтобы ждать медленных команд до конца, я бы хотел запускать их в фоновом режиме. Однако, когда они заканчивают работу и печатают в стандартный вывод, я получаю (где █
представляет мой курсор) это:
$ slowcmd & $ cmd_output █
- Перед моим курсором нет строки подсказки.
- и
slowcmd
может быть любой медленной командой (о вещах, которые я пробовал, я только что сказалalias slowcmd='sleep 1 && echo cmd_output'
)
В то время как я хотел бы что-то вроде этого:
$ slowcmd && redrawPromptString & $ cmd_output $ █
Где после вывода команды для меня выводится новая строка подсказки.
Что я могу сделать, чтобы сделать redrawPromptString
то, что я хочу? Я пытался clear
, kill $$
чтобы послать ^C
к терминалу, и, наконец, printf "^C"
(конечно, не работает). Я бегу Баш. (GNU bash, версия 3.2.57).
2 ответа на вопрос
Используйте redraw-current-line
функцию bind
встроенного. Сначала проверьте, если это уже связано, может быть:
bind -q redraw-current-line
Я никогда не видел его привязанным по умолчанию, поэтому вам, вероятно, придется связать его. Выберите комбинацию клавиш, скажем, Ctrl+ Y. Проверьте, не занято ли уже:
bind -p | grep -F '"\C-y'
Пустой вывод означает, что комбинация не используется. Если так, давайте свяжемся redraw-current-line
с этим:
bind "\C-y":redraw-current-line
Теперь, когда фоновый процесс мешает вашей командной строке, нажмите Ctrl+ Y. Затем ваша подсказка будет перерисована вместе с любой командой, которую вы только что частично набрали (если она есть), так что вы можете продолжить, как будто ничего не произошло.
Чтобы сделать привязку постоянной, вы можете добавить вышеуказанную команду к вашей ~/.bashrc
, но не добавляйте . Правильный подход заключается в изменении ~/.inputrc
(для пользователя) или /etc/inputrc
(для всей системы). Таким образом, любая программа, которая использует readline(3)
библиотеку, будет подчиняться. Строка для добавления в любой файл выглядит следующим образом:
"\C-y":redraw-current-line
Но если вы создаете ~/.inputrc
заново, убедитесь, что в первой строке написано $include /etc/inputrc
. Это потому, что до этого момента readline
использовался /etc/inputrc
и, возможно, ваш рабочий процесс зависит от того, что находится в этом файле. Отныне библиотека будет использовать ~/.inputrc
вместо вас; строка также $include /etc/inputrc
выполняет синтаксический анализ общесистемного файла.
Для получения дополнительной информации см help bind
и man 3 readline
.
Похожие вопросы
-
2
.profile в Mac OS X?
-
1
Приостановить все, кроме x задач, интенсивно использующих процессор
-
6
Какие функции Zsh вы используете?
-
-
5
Прозрачная командная строка в Vista?
-
4
Используйте портфель Windows из командной строки
-
4
Почему некоторые команды не существуют?
-
11
Есть ли простой способ разделить mp3 файлы?
-
2
Как я могу получить OSX Terminal.app для открытия полноэкранного режима, а не каскадного?
-
4
Синхронизация удаленных папок в Linux
-
6
Полноэкранная командная строка или замена Vista