Як я можу редагувати змінну в запущеній оболонці?


8

Я редагую підказку PS1, і не хочу продовжувати пошук свого bashrc, щоб оновити його (оскільки мій bashrc також скидає інші речі). Я також не хочу копіювати і вставляти її знову і знову. Чи існує спосіб інтерактивного редагування змінної, як-от за допомогою nano(мій редактор за замовчуванням)?

PS1 - це здебільшого приклад, тому що я хочу зробити те ж саме з іншими варіантами. Причина, яку я хочу робити це інтерактивно, полягає в тому, що змінна вже досить довга, і мені просто потрібно відредагувати в ній кілька символів. І мені потрібно лише змінити його в поточній оболонці.

Відповіді:


8

Це можна зробити. Введіть, 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\$

Після чого ви можете редагувати їх у редакторі Ctrlx Ctrle( edit-and-execute-commandза умовами перегляду). Коли ви зберігаєте та закриваєте, збережений вміст буде виконаний оболонкою.

Якщо у вас вже є PS1=...історія, ви можете просто повернутися до цього і Ctrlx Ctrle.

З посібника з bash :

shell-expand-line (M-C-e)

Розгорніть рядок, як це робить оболонка. Це виконує псевдоніми та розширення історії, а також усі розширення слова оболонки.

edit-and-execute-command (C-xC-e)

Викликайте редактор у поточному командному рядку та виконайте результат у вигляді команд оболонки. Bash намагається викликати $ VISUAL, $ EDITOR та emacs як редактор у такому порядку.


Приємно! Просто Esc, Ctrl + E - саме те, що я шукав. Хоча, коли я вводив текст PS1='$PS1', він видалив лапки, але введення тексту PS1=\'$PS1\'працює чудово.
wjandrea

Читаючи bind -p, я також з'ясував, що ви можете розширювати глобуси, тильди та рядки історії. Акуратно!
wjandrea

1

Замість пошуку bashrc, введіть інший файл, який просто містить змінну.

  1. Створіть:

    echo "PS1='$PS1'" > /tmp/PS1
    • Примітка. Якщо змінна містить одинарні лапки, вам потрібно буде використовувати команду, яка може вийти з них, наприклад:

      declare -p PS1 | cut -d' ' -f3- > /tmp/PS1
  2. Відкрийте його в редакторі, наприклад nano /tmp/PS1.

    • Щоб уникнути повторного перезавантаження nano, ви можете запустити його в іншому терміналі / TTY або скористатися графічним редактором.
  3. Внесіть зміни та збережіть.

  4. Джерело:

    source /tmp/PS1
  5. Повторіть кроки 3 та 4 за потребою.


1

Zsh має вбудовану назву, varedяка дозволяє редагувати змінну в рядку. Я написав власну версію, спочатку розміщену на Super User :

vared(){
    # Based on the zsh builtin of the same name.
    IFS= read -rei "${!1}" "$1"
}

Зауважте, це має деякі тонкі відмінності від вбудованого Zsh, наприклад:

  • Не буде помилкою, якщо змінна не встановлена
  • Перевіряє дійсність назви змінної перед друком її значення (наприклад vared $)
  • Скорочує багаторядкові змінні.

Потім для редагування PS1 просто запустіть vared PS1.


Прийняття цієї відповіді викликає саме те, що я використовую щодня
wjandrea
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.