Variável não ligada ao executar o script no dispositivo incorporado?

0

Eu tenho um script que funciona normalmente, quando acionado na minha área de trabalho curl -sL https://sentry.io/get-cli/ | bash .

Quando eu chamo o mesmo comando curl acima, mas de um dispositivo incorporado, obtenho:

bash: line 22: !DOWNLOAD_URL_LOOKUP: unbound variable

Por que isso acontece apenas no dispositivo incorporado mais antigo? (Ubuntu 14.04, GNU bash, versão 4.3.11 (1) -release (arm-unknown-linux-gnueabihf))

Script relacionado:

#!/bin/bash
set -eu

SENTRY_DOWNLOAD_Darwin_x86_64="https://github.com/getsentry/sentry-cli/releases/download/1.26.0/sentry-cli-Darwin-x86_64"
SENTRY_DOWNLOAD_Linux_i686="https://github.com/getsentry/sentry-cli/releases/download/1.26.0/sentry-cli-Linux-i686"
SENTRY_DOWNLOAD_Linux_x86_64="https://github.com/getsentry/sentry-cli/releases/download/1.26.0/sentry-cli-Linux-x86_64"
SENTRY_DOWNLOAD_Windows_i686="https://github.com/getsentry/sentry-cli/releases/download/1.26.0/sentry-cli-Windows-i686.exe"
SENTRY_DOWNLOAD_Windows_x86_64="https://github.com/getsentry/sentry-cli/releases/download/1.26.0/sentry-cli-Windows-x86_64.exe"
VERSION="1.26.0"
PLATFORM='uname -s'
ARCH='uname -m'

# If the install directory is not set, set it to a default
if [ -z ${INSTALL_DIR+x} ]; then
  INSTALL_DIR=/usr/local/bin
fi
if [ -z ${INSTALL_PATH+x} ]; then
  INSTALL_PATH="${INSTALL_DIR}/sentry-cli"
fi

DOWNLOAD_URL_LOOKUP="SENTRY_DOWNLOAD_${PLATFORM}_${ARCH}"
DOWNLOAD_URL="${!DOWNLOAD_URL_LOOKUP}"

echo "This script will automatically install sentry-cli ${VERSION} for you."
echo "Installation path: ${INSTALL_PATH}"
if [ "x$(id -u)" == "x0" ]; then
  echo "Warning: this script is currently running as root. This is dangerous. "
  echo "         Instead run it as normal user. We will sudo as needed."
fi

if [ -f "$INSTALL_PATH" ]; then
  echo "error: sentry-cli is already installed."
  exit 1
fi

if [ x$DOWNLOAD_URL == x ]; then
  echo "error: your platform and architecture (${PLATFORM}-${ARCH}) is unsupported."
  exit 1
fi

if ! hash curl 2> /dev/null; then
  echo "error: you do not have 'curl' installed which is required for this script."
  exit 1
fi

TEMP_FILE='mktemp "${TMPDIR:-/tmp}/.sentrycli.XXXXXXXX"'

cleanup() {
  rm -f "$TEMP_FILE"
}

trap cleanup EXIT
curl -SL --progress-bar "$DOWNLOAD_URL" > "$TEMP_FILE"
chmod 0755 "$TEMP_FILE"
if ! mv "$TEMP_FILE" "$INSTALL_PATH" 2> /dev/null; then
  sudo -k mv "$TEMP_FILE" "$INSTALL_PATH"
fi

echo 'Done!'
    
por Philip Kirkbride 06.12.2017 / 19:01

2 respostas

1

Não há muita informação a ser feita aqui, mas você conseguiu as variáveis? Em caso afirmativo, tente desativar o rigor de variável para o arquivo originado chamando set +u antes de você originar o arquivo e, em seguida, ative-o imediatamente depois com set -u

    
por 06.12.2017 / 19:56
1

Eu acho que vejo o que está acontecendo. DOWNLOAD_URL_LOOKUP é definido como SENTRY_DOWNLOAD_Linux_armv7l .

Em seguida, a linha:

 DOWNLOAD_URL="${!DOWNLOAD_URL_LOOKUP}"

Tenta mapear o DOWNLOAD_URL com base nas variáveis definidas no início:

SENTRY_DOWNLOAD_Darwin_x86_64="https://github.com/getsentry/sentry-cli/releases/download/1.26.0/sentry-cli-Darwin-x86_64"
SENTRY_DOWNLOAD_Linux_i686="https://github.com/getsentry/sentry-cli/releases/download/1.26.0/sentry-cli-Linux-i686"
SENTRY_DOWNLOAD_Linux_x86_64="https://github.com/getsentry/sentry-cli/releases/download/1.26.0/sentry-cli-Linux-x86_64"
SENTRY_DOWNLOAD_Windows_i686="https://github.com/getsentry/sentry-cli/releases/download/1.26.0/sentry-cli-Windows-i686.exe"
SENTRY_DOWNLOAD_Windows_x86_64="https://github.com/getsentry/sentry-cli/releases/download/1.26.0/sentry-cli-Windows-x86_64.exe"

Como estes não incluem SENTRY_DOWNLOAD_Linux_armv7l , o erro é retornado. Se eu adicionar uma URL para minha versão, o script será executado:

SENTRY_DOWNLOAD_Linux_arm7l="https://google.com"

Também parece que o script tinha uma mensagem de erro para esta situação, mas set -u fez com que o programa fosse encerrado quando uma variável não definida foi referenciada.

    
por 06.12.2017 / 20:27

Tags