How to prompt a user for an expanded variable in Bash?
I work with CentOS operating system and my only shell is Bash.
I want to create a script which prompts a user with a question like "What is your web application root?"
The user should answer directly in terminal and the answer would be stored in a variable named web_application_root
.
I assume that generally the user would use variables such as ${HOME}
(envar) or ${some_medium_directory}
(non envar) in its answer, so any variable/s should be expanded.
How to prompt a user for an expanded variable?
I prefer not to use the read
shell builtin for this because it requires IFS
configuration which at least for now I find as an "overkill".
I don't think I would mind using Node.JS, Python, Perl or any "shell-completing" programming language if I have to, I just want to have something which is working and stable.
1 answer
How about this for bash:
#!/bin/bash
echo "What is your web application root?"
read web_application_root
web_application_root="$(envsubst <<< "$web_application_root")"
echo web_application_root=$web_application_root
envsubst
does the environment variable expansion for you. For example:
$ ./test.sh
What is your web application root?
${HOME}/a b
web_application_root=/home/Someone/a b
1 comment
Oh, finally something which works for me easily, thanks a lot ; I have tested echo $web_application_root
before web_application_root="$(envsubst <<< "$web_application_root")"
and after . Before I got a string and after I got a ROOT_DIRECTORY_NAME/the_rest
, as expected.
3 comments
How would you want to take input from the user without using
read
in bash? What is so bad aboutIFS='' read ...
that you would like to use another language instead? Is there more to your solution than simply setting one variable from the values of another? Why isweb_application_root="${HOME}"
(which makes the variable available and allows for env var expansion) not sufficient in your use case? — Someone 26 days agoAlso: When
${some_medium_directory}
is not an env var, where does it come from? — Someone 26 days agoHello!
Q1
: I don't know :)Q2
: I don't understand why IFS isn't on by default forread
and to be honest I am not even sure I understand what it does.Q3
: I am not sure I understand but probably there isn't more.Q4
:web_application_root="${HOME}"
is nice but I want to prompt the user for it as part of a bit larger interactive installation program which prompts for data by design.Q5
: It might come from the user's preference to represent such a medium directory in a global variable. — JohnDoea 26 days ago