2011-09-19 20 views
5

Quiero almacenar un mensaje de usuario en un programa bash, y luego mostrar el mensaje la próxima vez que el usuario ejecute el script.BASH: ¿Cómo solicitar la entrada del usuario y almacenarla para el futuro?

Una forma en que pensé que esto podría funcionar es exportar el mensaje a una variable de entorno, pero no puedo hacerlo funcionar.

Esto es lo que tengo hasta ahora, pero no está funcionando:

echo "Last message was: $KEEPTHISMESSAGE" 
echo "Type the new message that you want to enter, followed by [ENTER]:" 
read KEEPTHISMESSAGE 
export KEEPTHISMESSAGE 

¿Qué estoy haciendo mal? Si hay una mejor manera de hacerlo, házmelo saber. ¿Quizás guarde un archivo que mantenga un historial de estos mensajes y obtenga el más reciente?

Respuesta

7

No puede usar EXPORTAR de esta forma. Solo exporta a procesos iniciados desde esa invocación del script. Debe almacenar el mensaje en un archivo en el sistema de archivos y cargarlo la próxima vez que su usuario ejecute el script. Muy simple:

echo "Last message was: $(cat message.txt)" 
echo "Type the new message that you want to enter, followed by [ENTER]:" 
read KEEPTHISMESSAGE 
echo $KEEPTHISMESSAGE > message.txt 

Vas a tener que trabajar en lo que sucede la primera vez (cuando message.txt no existe), y problemas con las rutas relativas/absolutas a message.txt si se está ejecutando el script en un directorio diferente

+3

+1 Esto se puede modificar para usar un archivo oculto (comienza con a.) Llámalo ~/.yourprog.history Lee este archivo en tu script bash comprándolo, y sobrescribe el contenido cuando finalice tu script. –

+1

echo $ KEEPTHISMESSAGE> message.txt ** sobrescribe o crea message.txt **; Use >> para anexar – Paul

+1

@Paul pero agregar es indeseable en su pregunta, si lo hace debe usar 'tail -1' en lugar de' cat' –

2

Los scripts solo pueden exportar variables directamente a sus subprocesos. No pueden exportar a procesos principales.

Puede alterar el ambiente padres invocando el script como el siguiente:

$ . /path/to/your_script.sh 

Aquí la secuencia de comandos debe tener una declaración de exportación para exportar la variable y no debe tener una declaración de salida.

Cuestiones relacionadas