Make it possible to use "~" or "~user" in the installer.
I've looked for a while, and it seems that there is no easy way to do this, not even in bash, and worse with /bin/sh. So this is kind of resorting to a simple parsing of the input, and using `eval' if it starts with a tilde. Note the hack of not doing that when there is a space, otherwise the `eval' thing will silently ignore it. This hack means that it's easy to get into a mess if quotes are used after a tilde, but that was already the case with the use of `eval' to handle environment variables. It's not a real security issue, however, since we're talking about a user who can just run any command anyway. Also including a test file for the expansion functionality. If anyone wants to improve this code, making the tests pass would reveal the tricky issues. [FWIW, I've asked on the #bash channel, and the only serious suggestion was getting the paths as command-line arguments. This will, however, defeat the point of being newbie friendly...] Closes PR 12893. original commit: 0814fd5fb5f660bc9698f21445976902317291d1
This commit is contained in:
parent
dd17398379
commit
2d17c12ac6
|
@ -54,6 +54,22 @@ lookfor mkdir
|
||||||
lookfor basename
|
lookfor basename
|
||||||
lookfor dirname
|
lookfor dirname
|
||||||
|
|
||||||
|
# substitute env vars and tildes
|
||||||
|
expand_path_var() {
|
||||||
|
eval "expanded_val=\"\$$1\""
|
||||||
|
first_part="${expanded_val%%/*}"
|
||||||
|
if [ "x$first_part" = "x$expanded_val" ]; then
|
||||||
|
rest_parts=""
|
||||||
|
else
|
||||||
|
rest_parts="/${expanded_val#*/}"
|
||||||
|
fi
|
||||||
|
case "x$first_part" in
|
||||||
|
x*" "* ) ;;
|
||||||
|
x~* ) expanded_val="`eval \"echo $first_part\"`$rest_parts" ;;
|
||||||
|
esac
|
||||||
|
eval "$1=\"$expanded_val\""
|
||||||
|
}
|
||||||
|
|
||||||
# Need this to make new `tail' respect old-style command-line arguments. Can't
|
# Need this to make new `tail' respect old-style command-line arguments. Can't
|
||||||
# use `tail -n #' because some old tails won't know what to do with that.
|
# use `tail -n #' because some old tails won't know what to do with that.
|
||||||
_POSIX2_VERSION=199209
|
_POSIX2_VERSION=199209
|
||||||
|
@ -133,11 +149,9 @@ case "x$where" in
|
||||||
x2 ) where="/usr/local${TARGET1}" ;;
|
x2 ) where="/usr/local${TARGET1}" ;;
|
||||||
x3 ) where="${HOME}${TARGET1}" ;;
|
x3 ) where="${HOME}${TARGET1}" ;;
|
||||||
x4 | x. | x./ ) where="`pwd`${TARGET1}" ;;
|
x4 | x. | x./ ) where="`pwd`${TARGET1}" ;;
|
||||||
|
* ) expand_path_var where ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# substitute env vars and tildes
|
|
||||||
where="`eval \"echo \\\"$where\\\"\"`"
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
## Default system directories prefixed by $1, mimic configure behavior
|
## Default system directories prefixed by $1, mimic configure behavior
|
||||||
## used for unixstyle targets and for wholedir links
|
## used for unixstyle targets and for wholedir links
|
||||||
|
@ -332,6 +346,7 @@ unixstyle_install() {
|
||||||
echon "> "; read change_what
|
echon "> "; read change_what
|
||||||
read_dir() {
|
read_dir() {
|
||||||
echon "New directory (absolute or relative to $where): "; read new_dir
|
echon "New directory (absolute or relative to $where): "; read new_dir
|
||||||
|
expand_path_var new_dir
|
||||||
case "$new_dir" in
|
case "$new_dir" in
|
||||||
"/"* ) eval "$1=\"$new_dir\"" ;;
|
"/"* ) eval "$1=\"$new_dir\"" ;;
|
||||||
* ) eval "$1=\"$where/$new_dir\"" ;;
|
* ) eval "$1=\"$where/$new_dir\"" ;;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user