Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

BASH: How to ask user input and store it for the future?

Tags:

linux

bash

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?

like image 826
eric Avatar asked Sep 19 '11 23:09

eric


People also ask

How can you collect user's input in a bash script?

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.

Which command is used to get and store input from the user in shell programming?

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.


2 Answers

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.

like image 61
Jim Garrison Avatar answered Sep 28 '22 06:09

Jim Garrison


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.

like image 39
jman Avatar answered Sep 28 '22 05:09

jman