Quiero crear alias bash dentro de un bucle donde el bucle lee líneas de un comando. Para leer la salida línea por línea, creo que necesito conectar la salida al read
. Cuando hago eso, sin embargo, los alias no existen.¿Por qué no puedo evaluar dentro de un ciclo while?
Si incluyo lo siguiente en mi .bashrc
:
for x in a1 a2; do
eval "alias $x='echo foo'"
done
echo -e "a3\na4" | while read x; do
eval "alias $x='echo foo'"
done
Alias a1
y a2
existir, pero a3
y a4
no. ¿Cuál es la diferencia entre esos dos bucles?
Esto es muy común cuando se conecta a un bucle 'while'. Ver [esta respuesta] (http://stackoverflow.com/questions/7612320/bash-weird-variable-scope-when-populating-array-with-results/7612420#7612420), o [BashFAQ/024] (http: //mywiki.wooledge.org/BashFAQ/024) para detalles y varias soluciones alternativas. –
Además, no hay necesidad de utilizar 'eval' aquí. 'alias $ x = 'echo foo'' expandirá' $ x' antes de definir el alias. – chepner