Vi que con zsh vared puedes editar sobre la marcha la variable de entorno especificada. ¿Hay un comando equivalente para bash ?
Gracias
No estoy al tanto de todo lo que funciona como zsh's vareden 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 vimcon 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. commandes necesario omitir el alias de shell y las búsquedas de funciones, por ejemplo, un rmalias rm -ique 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.
$VISUALlugar 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 valorvimy guárdelo para cambiar la variable de entorno. (mktempfunciona de manera diferente según el sistema operativo, esta llamada parece funcionar principalmente según lo previsto en RHEL y OS X).