Respuestas:
No estoy al tanto de todo lo que funciona como zsh
's vared
en bash
, fuera de la caja.
Sin embargo, puede definir una función que le permita editar el valor de una variable de entorno utilizando, por ejemplo 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"
}
Llámalo como vared PATH
.
¿Qué hace? Crea un archivo temporal, escribe el valor actual de la variable especificada en el archivo y se abre vim
con el archivo temporal como argumento. Ahora se espera que edite el valor, lo guarde y salga vim
(puede salir sin guardar el archivo para omitir los cambios guardados). Luego, el contenido del archivo se establece como el nuevo valor de la variable, todo se exporta y se elimina el archivo temporal. command
es necesario omitir el alias de shell y las búsquedas de funciones, por ejemplo, un rm
alias rm -i
que preguntar antes de eliminar el archivo al final de lo contrario.
Si la variable no existe o no es una variable de entorno , lo será después.
$VISUAL
lugar de codificar vim, y puedes usar en $(< "$tmpfile")
lugar de cat - $(<
es un bash incorporado
VISUAL
: No está configurado de manera predeterminada (al menos en OS X), y verificar si existe y agregar un respaldo (que de todos modos necesitaría ser personalizado) aumentaría innecesariamente la complejidad aquí.
en bash 4.x puedes hacer exactamente lo mismo de esta manera
# bash
read -e -p 'edit your path: ' -i "$PATH" PATH
# zsh
vared -p 'edit your path: ' PATH
fuente https://stackoverflow.com/questions/2642585/read-a-variable-in-bash-with-a-default-value
docs https://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html
Esto se basa en la respuesta de thecotne , escrita para GNU Bash 4.3:
vared(){
# Based on the zsh builtin of the same name.
IFS= read -rei "${!1}" "$1"
}
Tenga en cuenta que esto tiene algunas diferencias sutiles con respecto al Zsh incorporado, por ejemplo:
vared $
. Ej. )
function vared { tmpfile=$( mktemp -t vared.XXXX ) ; echo "${!1}" > "$tmpfile" ; vim "$tmpfile" && export $1=$( cat "$tmpfile" ) ; rm "$tmpfile" ; }
. Llame comovared PATH
, por ejemplo , edite el valorvim
y guárdelo para cambiar la variable de entorno. (mktemp
funciona de manera diferente según el sistema operativo, esta llamada parece funcionar principalmente según lo previsto en RHEL y OS X).