7

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?

1

2 Answers 2

7

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.

Sign up to request clarification or add additional context in comments.

6 Comments

+1 This can be modified to use a hidden file (starts with a . ) Call it ~/.yourprog.history Read this file in your bash script by sourcing it, and overwrite the contents when your script ends.
echo $KEEPTHISMESSAGE > message.txt overwrites or creates message.txt ; Use >> for append
@Paul but appending is undesirable in his question, if he does that he should use tail -1 instead of cat
@Jim and everyone else, thanks this was the solution. i also used >> for appending, and tail -1 instead of cat
'$ read -p "Type the new message that you want to enter, followed by [ENTER]:" KEEPTHISMESSAGE ' will do it in one step.
|
2

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.