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