我正在编写我的第一个bash脚本,该脚本将使用Wraith进行一些视觉测试。我已经删除了代码,以使其更容易阅读。
我要写的是:
- bash命令接受参数-1、2或3。即regressiontest 1
-server
将分配传递的参数
-alias config
将分配给wraith capture configs/capture-staging-1.yaml
,wraith capture configs/capture-staging-2.yaml
或
wraith capture configs/capture-staging-3.yaml
- 回声语句写入TXT文件。
脚本按预期工作。唯一的问题是:
如果运行regressiontest 1
,则一切都很好,可以按预期运行wraith capture configs/capture-staging-1.yaml
。
我运行regressiontest 2
,我希望它能运行wraith capture configs/capture-staging-2.yaml
,但似乎再次运行wraith capture configs/capture-staging-1.yaml
。
它似乎正在使用上一个配置文件运行。如果我再次关闭和打开终端,它可以按预期工作,但是如果我连续执行不同的参数运行相同的命令,它似乎总是运行我使用的第一个命令。
我在做什么错?
我是bash脚本的新手,很难谷歌寻找答案
function regressiontest {
regressionfolder=~/path/to/folder
cd $regressionfolder
alias config
if [ $# -eq 0 ]; then
echo "No arguments provided - USAGE: regressiontest <server>"
return 0
else
server=$1
fi
if [ $server != 1 ] && [ $server != 2 ] && [ $server != 3 ]; then
echo "Visual Regression Testing argument invalid - USAGE: regressiontest <server>"
return 0
elif [ $server == 1 ]; then
server="1"
alias config='wraith capture configs/capture-staging-1.yaml'
elif [ $server == 2 ]; then
server="2"
alias config='wraith capture configs/capture-staging-2.yaml'
elif [ $server == 3 ]; then
server="3"
alias config='wraith capture configs/capture-staging-3.yaml'
fi
echo "https://website-staging-$server/" > data/server.txt
config
}
任何帮助将不胜感激。谢谢,所有人Moe
您的想法是正确的,但是使事情比需要更难。您的脚本的初始部分很好,尽管我会证明cd
成功,例如
regressionfolder=~/path/to/folder
cd "$regressionfolder" || {
printf "error: unable to change to %sn" "$regressionfolder" >&2
return 1
}
(注意: 1
的返回通常表示错误,并且始终 double Quote 您的变量(
检查"$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
}
(注意:始终 double Quote 带有[...]
的变量(
消除alias
不需要alias
,您可以简单地运行:
wraith capture configs/capture-staging-$server.yaml
完全放置它,您可以做类似的事情:
function regressiontest {
regressionfolder="$HOME/path/to/folder"
cd "$regressionfolder" || {
printf "error: unable to change to %sn" "$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 %sn" "$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
}
我认为您不想声明别名,而是存储命令以供以后执行;只需从alias config='…'
中删除"别名",然后通过$config
拨打它。