Я видел, что с zsh vared
вы можете на лету редактировать указанную переменную окружения. Есть ли эквивалентная команда для bash?
Спасибо
3 ответа
Я не знаю ничего , что работает как 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
будет просить перед удалением файла в конце иначе.
Если переменная не существует или не является переменной среды , она будет впоследствии.
в 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
Это основано на ответе thecotne, написанном для GNU Bash 4.3:
vared(){
# Based on the zsh builtin of the same name.
IFS= read -rei "${!1}" "$1"
}
Обратите внимание, что в этом есть некоторые тонкие отличия от встроенных в Zsh, например:
- Не будет ошибки, если переменная не установлена
- Проверяет правильность имени переменной перед печатью ее значения (например,
vared $
) - Усекает многострочные переменные.