I want to store a user message in a bash program, and then display the message the next time the user runs the script.
One way I thought this might work is if I export the message to an environmental variable, but I cannot get it to work.
Here is what I have so far, but it is not working:
echo "Last message was: $KEEPTHISMESSAGE"
echo "Type the new message that you want to enter, followed by [ENTER]:"
read KEEPTHISMESSAGE
export KEEPTHISMESSAGE
What am I doing wrong? If there is a better way to do this, please let me know. Maybe keep a file that keeps a history of these message and gets the most recent?
Ask the User for Input. If we would like to ask the user for input then we use a command called read. This command takes the input and will save it into a variable.
Shell scripts can be made interactive with the ability to accept input from the command line. Read command can be used to store the command line input in a variable. A variable NAME has been used to accept input from the command line.
You cannot use EXPORT this way. It only exports to processes started from within that invocation of the script. You must store the message in a file on the filesystem and load it in the next time your user executes the script. Very simply:
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
You'll have to work out what happens the first time (when message.txt doesn't exist), and issues with relative/absolute paths to message.txt
if you're running the script in a different directory.
Scripts can only directly export variables to their sub-processes. They can't export to parent processes.
You can alter a parents environment by invoking your script like this:
$ . /path/to/your_script.sh
Here your script should have an export statement to export the variable and must not have an exit statement.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With