5

Я видел, что с zsh vared вы можете на лету редактировать указанную переменную окружения. Есть ли эквивалентная команда для bash?
Спасибо

3 ответа3

6

Я не знаю ничего , что работает как zsh vared «ы в bash из коробки.

Однако вы можете определить функцию, которая позволит вам редактировать значение переменной среды, например, с помощью vim:

function vared {
  [[ $# -eq 1 ]] || { echo "Usage: vared VARNAME" >&2 ; return 1 ; }
  tmpfile=$( command mktemp -t vared.XXXX )
  echo "${!1}" > "$tmpfile"
  command vim "$tmpfile" && export $1="$(< "$tmpfile" )"
  command rm "$tmpfile"
}

Назовите это как vared PATH .

Что оно делает? Он создает временный файл, записывает текущее значение указанной переменной в файл и открывает vim с временным файлом в качестве аргумента. Теперь вы должны отредактировать значение, сохранить и выйти из vim (вы можете выйти без сохранения файла, чтобы пропустить сохранение изменений). После этого содержимое файла устанавливается как новое значение переменной, все экспортируется и временный файл удаляется. command необходимо пропустить псевдоним оболочки и функции Lookups, например, rm псевдоним rm -i будет просить перед удалением файла в конце иначе.

Если переменная не существует или не является переменной среды , она будет впоследствии.

2

в Bash 4.x вы можете сделать то же самое, как это

# bash
read -e -p 'edit your path: ' -i "$PATH" PATH

# zsh
vared -p 'edit your path: ' PATH

источник https://stackoverflow.com/questions/2642585/read-a-variable-in-bash-with-a-default-value

документы https://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html

0

Это основано на ответе thecotne, написанном для GNU Bash 4.3:

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

Обратите внимание, что в этом есть некоторые тонкие отличия от встроенных в Zsh, например:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .