Wrap $(cmd_version xxxx) with double quotes

cmd_version xxxx like cmd_version hledger will return empty string if
hledger is not installed, and then `cmpver $(cmd_version hledger) $HLEDGER_VERSION`
will become `cmpver $HLEDGER_VERSION`
Wrapping $(cmd_version xxxx) with double quotes can solve this.
This commit is contained in:
SpicyCat 2018-07-15 22:18:17 +08:00
parent acff169dba
commit 0877d9f169
No known key found for this signature in database
GPG Key ID: 9E063584377E856B

View File

@ -1,6 +1,6 @@
#!/bin/bash
# Easy hledger installation script for POSIX systems.
# Uses cabal if installed and stack is not,
# Uses cabal if installed and stack is not,
# or stack, which it will install if needed (or if --force-install-stack is used).
# Requires bash and some other POSIX tools.
# This is based on get-stack.sh which is copyright (c) 2015-2017, Stack contributors.
@ -12,15 +12,15 @@ usage() {
cat <<HERE
hledger-install.sh [-f|--force-install-stack] [-v|--verbose] [-s|--status] [--version] [-h|--help]
Installs the current release of hledger and related tools as reliably and
quickly as possible on any POSIX system, using cabal (if installed and
stack is not) or stack (installing it when needed or if --force-install-stack is used).
Installs the current release of hledger and related tools as reliably and
quickly as possible on any POSIX system, using cabal (if installed and
stack is not) or stack (installing it when needed or if --force-install-stack is used).
With --status, just lists the currently installed hledger tools.
Usage:
curl -sSLO http://hledger.org/hledger-install.sh # or wget -qO- ...
less hledger-install.sh # security review
bash [-x] hledger-install.sh # to see commands being run, add -x
bash [-x] hledger-install.sh # to see commands being run, add -x
or if you prefer convenience to security:
@ -33,7 +33,7 @@ Once hledger is installed, if you keep hledger-install.sh in \$PATH
hledger install -- -s # shows installation status
Note this can require significant time (minutes to hours), memory (~2G),
and disk space (megabytes to a gigabyte) depending on your connection,
and disk space (megabytes to a gigabyte) depending on your connection,
machine and past installations. You can kill and rerun it without losing progress.
(But note if you ctrl-C too vigorously, it might leave a
"hackage-security-lock" directory which you'll need to remove manually,
@ -42,7 +42,7 @@ cf https://github.com/commercialhaskell/stack/issues/3055).
Version $HLEDGER_INSTALL_VERSION, installs hledger $HLEDGER_VERSION
HERE
}
#TODO https://github.com/commercialhaskell/stack/issues/3055 https://github.com/haskell/hackage-security/issues/187
#TODO https://github.com/commercialhaskell/stack/issues/3055 https://github.com/haskell/hackage-security/issues/187
#Updating package index Hackage (mirrored at https://s3.amazonaws.com/hackage.fpcomplete.com/) ...
# /Users/simon/.stack/indices/Hackage/hackage-security-lock: createDirectory: already exists (File exists)
@ -53,10 +53,10 @@ HLEDGER_INSTALL_VERSION=20180711
RESOLVER="--resolver=lts-12"
#RESOLVER="--resolver=nightly-2018-07-09"
# ^ You can specify a different stackage snapshot here,
# or comment out this line to use your current global resolver, which might
# avoid some unnecessary building. OSX Sierra+ requires at least lts-8.0.
# lts-6 or 7 probably require tweaking the hledger install commands below.
# ^ You can specify a different stackage snapshot here,
# or comment out this line to use your current global resolver, which might
# avoid some unnecessary building. OSX Sierra+ requires at least lts-8.0.
# lts-6 or 7 probably require tweaking the hledger install commands below.
HLEDGER_LIB_VERSION=1.10
HLEDGER_VERSION=1.10
@ -770,7 +770,7 @@ cmd_location() {
command -v "$1"
}
# Get the given command's version, ie the first number in its --version output,
# Get the given command's version, ie the first number in its --version output,
# or empty string if there's a problem.
cmd_version() {
(command "$1" --version 2>/dev/null | grep -E '[0-9]' | $SED -e 's/[^0-9]*([0-9][0-9.]*).*/\1/') || ""
@ -778,7 +778,7 @@ cmd_version() {
# Check whether the given command exists with given version
has_cmd_version() {
[[ $(cmd_version "$1") == "$2" ]]
[[ $(cmd_version "$1") == "$2" ]]
}
# Show a command's presence in $PATH, and its version if present.
@ -790,7 +790,7 @@ print_cmd_version() {
fi
}
# Show the installation status of the $HLEDGER_MAIN_TOOLS and $HLEDGER_OTHER_TOOLS.
# Show the installation status of the $HLEDGER_MAIN_TOOLS and $HLEDGER_OTHER_TOOLS.
print_hledger_versions() {
for cmd in $HLEDGER_MAIN_TOOLS $HLEDGER_OTHER_TOOLS $HLEDGER_INSTALL_TOOL ; do print_cmd_version "$cmd"; done
}
@ -806,7 +806,7 @@ quietly_run() {
"$@" 2>/dev/null || true
}
# Try to install the executables of the given package(s) to $HOME/.local/bin,
# Try to install the executables of the given package(s) to $HOME/.local/bin,
# trying several methods, generally from quickest to most reliable, continuing on failure.
# Current the installation methods are:
# - if stack is not installed and cabal is, try cabal install
@ -949,13 +949,13 @@ cmpver () {
# try installing each package that needs installing, in turn
echo ----------
if [[ $(cmpver $(cmd_version hledger) $HLEDGER_VERSION) = 2 ]]; then
if [[ $(cmpver "$(cmd_version hledger)" $HLEDGER_VERSION) = 2 ]]; then
echo Installing hledger
try_install hledger-$HLEDGER_VERSION hledger-lib-$HLEDGER_LIB_VERSION
echo
fi
if [[ $(cmpver $(cmd_version hledger-ui) $HLEDGER_UI_VERSION) = 2 ]]; then
if [[ $(cmpver "$(cmd_version hledger-ui)" $HLEDGER_UI_VERSION) = 2 ]]; then
echo Installing hledger-ui
try_install hledger-ui-$HLEDGER_UI_VERSION hledger-$HLEDGER_VERSION hledger-lib-$HLEDGER_LIB_VERSION \
fsnotify-0.3.0.1
@ -964,39 +964,39 @@ if [[ $(cmpver $(cmd_version hledger-ui) $HLEDGER_UI_VERSION) = 2 ]]; then
echo
fi
if [[ $(cmpver $(cmd_version hledger-web) $HLEDGER_WEB_VERSION) = 2 ]]; then
if [[ $(cmpver "$(cmd_version hledger-web)" $HLEDGER_WEB_VERSION) = 2 ]]; then
echo Installing hledger-web
try_install hledger-web-$HLEDGER_WEB_VERSION hledger-$HLEDGER_VERSION hledger-lib-$HLEDGER_LIB_VERSION
echo
fi
if [[ $(cmpver $(cmd_version hledger-api) $HLEDGER_API_VERSION) = 2 ]]; then
if [[ $(cmpver "$(cmd_version hledger-api)" $HLEDGER_API_VERSION) = 2 ]]; then
echo Installing hledger-api
try_install hledger-api-$HLEDGER_API_VERSION hledger-$HLEDGER_VERSION hledger-lib-$HLEDGER_LIB_VERSION
echo
fi
# Third-party addons. We allow these to use an older version of
# hledger-lib, in case their bounds have not been updated yet.
if [[ $(cmpver $(cmd_version hledger-diff) $HLEDGER_DIFF_VERSION) = 2 ]]; then
# hledger-lib, in case their bounds have not been updated yet.
if [[ $(cmpver "$(cmd_version hledger-diff)" $HLEDGER_DIFF_VERSION) = 2 ]]; then
echo Installing hledger-diff
try_install hledger-diff-$HLEDGER_DIFF_VERSION hledger-lib-$HLEDGER_LIB_VERSION
echo
fi
if [[ $(cmpver $(cmd_version hledger-iadd) $HLEDGER_IADD_VERSION) = 2 ]]; then
if [[ $(cmpver "$(cmd_version hledger-iadd)" $HLEDGER_IADD_VERSION) = 2 ]]; then
echo Installing hledger-iadd
try_install hledger-iadd-$HLEDGER_IADD_VERSION hledger-lib-$HLEDGER_LIB_VERSION
echo
fi
if [[ $(cmpver $(cmd_version hledger-interest) $HLEDGER_INTEREST_VERSION) = 2 ]]; then
if [[ $(cmpver "$(cmd_version hledger-interest)" $HLEDGER_INTEREST_VERSION) = 2 ]]; then
echo Installing hledger-interest
try_install hledger-interest-$HLEDGER_INTEREST_VERSION hledger-lib-$HLEDGER_LIB_VERSION
echo
fi
if [[ $(cmpver $(cmd_version hledger-irr) $HLEDGER_IRR_VERSION) = 2 ]]; then
if [[ $(cmpver "$(cmd_version hledger-irr)" $HLEDGER_IRR_VERSION) = 2 ]]; then
echo Installing hledger-irr
try_install hledger-irr-$HLEDGER_IRR_VERSION hledger-lib-$HLEDGER_LIB_VERSION
echo