Вы думаете правильно, но делаете вещи сложнее, чем нужно. Ваша начальная часть скрипта в порядке, хотя я бы подтвердил, что cd
успешен, например,
regressionfolder=~/path/to/folder
cd "$regressionfolder" || {
printf "error: unable to change to %s\n" "$regressionfolder" >&2
return 1
}
( примечание: возврат 1
обычно указывает на ошибку и всегда двойная кавычка ваши переменные)
После проверки "$server" != 1 ...
все, что вам нужно сделать, это установить псевдоним с $server
в качестве числа. Никаких дополнительных if ... elif ...
не требуется, например,
if [ "$server" != 1 ] && [ "$server" != 2 ] && [ "$server" != 3 ]; then
echo "Visual Regression Testing argument invalid - USAGE: regressiontest <server>"
return 1
fi
alias config="wraith capture configs/capture-staging-$server.yaml"
config
}
( примечание: всегда двойные кавычки переменные без [...]
)
Исключить alias
Нет необходимости в alias
, вы можете просто запустить:
wraith capture configs/capture-staging-$server.yaml
В целом, вы можете сделать что-то похожее на:
function regressiontest {
regressionfolder="$HOME/path/to/folder"
cd "$regressionfolder" || {
printf "error: unable to change to %s\n" "$regressionfolder" >&2
return 1
}
if [ $# -eq 0 ]; then
echo "No arguments provided - USAGE: regressiontest <server>"
return 1
else
server=$1
fi
if [ "$server" != 1 ] && [ "$server" != 2 ] && [ "$server" != 3 ]; then
printf "Visual Regression Testing argument invalid - "
printf "USAGE: regressiontest <server>\n"
return 1
fi
wraith capture "configs/capture-staging-$server.yaml"
}
( примечание: также использование "$HOME"
вместо ~
. Хотя ~
будет расширяться в командной строке, вы быстро столкнетесь с проблемами при использовании его в скриптах)
Использование оператора case
Более короткая, более сжатая версия вашей функции с использованием case ... esac
, вероятно, будет немного лучше, например,
function regressiontest {
regressionfolder="$HOME/path/to/folder"
cd "$regressionfolder" || {
printf "error: unable to change to %s\n" "$regressionfolder" >&2
return 1
}
case "$server" in
[123] ) wraith capture "configs/capture-staging-$server.yaml";;
* ) printf "Visual Regression Testing argument invalid - "
printf "USAGE: regressiontest <server>\n"
return 1;;
esac
}