Почему мой bash-скрипт считает, что аргумента нет? - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь написать простой bash-скрипт, который будет выглядеть следующим образом

$ ./export.sh -n <my-file-name> -a <my-api-key>

Я использую это для передачи некоторых аргументов во время сборки в проекте Go.

Очень простая версия скрипта:

#!/bin/bash

while getopts n:a option
do
case "${option}"
in
n) FILENAME=${OPTARG};;
a) APIKEY=${OPTARG};;
esac
done

if [ -z "$FILENAME" ]
then
   FILENAME=downloader
fi

if [ -z "$APIKEY" ]
then
   echo "[ERROR] Missing API key"
   exit 1
fi

cd src && go build -o ../build/${FILENAME}.exe downloader -ldflags "-X api.APIServiceKey="${APIKEY}

Если FILENAME не существует, я предоставляю значение по умолчанию, однако, если APIKEY отсутствует, я хотел бы существовать и показать сообщение.

Выполнение скрипта со всеми аргументами, однако, выдает ошибку, как будто отсутствует APIKEY.

1 Ответ

0 голосов
/ 22 мая 2019

В вызове getopts отсутствует двоеточие. Поскольку вы ожидаете аргумент -a, в строке опций после него должно быть двоеточие: while getopts n:a: option

Цитирование справочной страницы getopts:

Когда для опции требуется аргумент-опция, утилита getopts должна поместите его в переменную оболочки OPTARG. [...] Если персонаж следует на ожидается, что опция будет иметь аргумент, который следует указывать в качестве отдельного аргумента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...