Я редактирую свою подсказку PS1 и не хочу, чтобы мой bashrc продолжал искать его (поскольку мой bashrc сбрасывает и другие вещи). Я также не хочу копировать и вставлять это снова и снова. Есть ли способ редактировать переменную в интерактивном режиме, например, с помощью nano
(мой редактор по умолчанию)?
PS1 - это в основном пример, потому что я хочу сделать то же самое с другими переменными. Причина, по которой я хочу сделать это в интерактивном режиме, заключается в том, что переменная уже довольно длинная, и мне просто нужно отредактировать в ней несколько символов. И мне нужно только изменить его в текущей оболочке.
У Zsh есть встроенная функция vared
, которая позволяет вам редактировать переменную inline. Я написал свою собственную версию, первоначально опубликованную на Super User :
vared(){
# Based on the zsh builtin of the same name.
IFS= read -rei "${!1}" "$1"
}
Обратите внимание, что это имеет некоторые тонкие отличия от встроенной Zsh, например:
vared $
) Затем, чтобы отредактировать PS1, просто запустите vared PS1
.
Это можно сделать. Введите var=$var
, а затем разверните и отредактируйте его. Чтобы развернуть, используйте Esc kbd> + Ctrl kbd> e kbd> (ярлык по умолчанию, проверьте вывод bind -p | grep shell-expand-line
для подтверждения).
Итак:
muru@muru-1604:~$ PS1=$PS1
станут:
muru@muru-1604:~$ PS1=${debian_chroot:+($debian_chroot)}\u@\h:\w\$
, которые затем вы можете редактировать в редакторе с помощью Ctrl kbd> x kbd > Ctrl kbd> e kbd> (edit-and-execute-command
в терминах readline). При сохранении и выходе сохраненный контент будет выполнен оболочкой.
Если у вас уже есть PS1=...
в вашей истории, вы можете просто вернуться к этому и Ctrl kbd> x kbd> Ctrl kbd> e KBD>.
Из руководства по bash :
shell-expand-line (M-C-e)
Разверните строку, как это делает оболочка. Это выполняет расширение псевдонима и истории, а также все расширения слов оболочки.
edit-and-execute-command (C-xC-e)
Вызвать редактор в текущей командной строке и выполнить результат как команды оболочки. Bash пытается вызвать $ VISUAL, $ EDITOR и emacs в качестве редактора в этом порядке.
Вместо того, чтобы использовать bashrc, создайте другой файл, который просто содержит переменную.
Создайте его:
echo "PS1='$PS1'" > /tmp/PS1
Примечание. Если переменная содержит одинарные кавычки, вам потребуется использовать команду, которая может их экранировать, например:
declare -p PS1 | cut -d' ' -f3- > /tmp/PS1
Откройте его в редакторе, например nano /tmp/PS1
.
nano
снова и снова, вы можете запустить его в другом терминале / TTY или использовать графический редактор. Внесите изменения и сохраните.
Источник:
source /tmp/PS1
При необходимости повторите шаги 3 и 4.