我有一个在Windows和Mac / Linux计算机上使用的sh脚本,并且似乎正常工作没有问题。
#!/bin/bash
if [ -z "$jmxname" ]
then
cd ./tests/Performance/JMX/ || exit
echo "-- JMX LIST --"
# set the prompt used by select, replacing "#?"
PS3="Use number to select a file or 'stop' to cancel: "
# allow the user to choose a file
select jmxname in *.jmx
do
# leave the loop if the user says 'stop'
if [[ "$REPLY" == stop ]]; then break; fi
# complain if no file was selected, and loop to ask again
if [[ "$jmxname" == "" ]]
then
echo "'$REPLY' is not a valid number"
continue
fi
# now we can use the selected file, trying to get it to run the shell script
rm -rf ../../Performance/results/* && cd ../jmeter/bin/ && java -jar ApacheJMeter.jar -Jjmeter.save.saveservice.output_format=csv -n -t ../../JMX/"$jmxname" -l ../../results/"$jmxname"-reslut.jtl -e -o ../../results/HTML
# it'll ask for another unless we leave the loop
break
done
else
cd ./tests/Performance/JMX/ && rm -rf ../../Performance/results/* && cd ../jmeter/bin/ && java -jar ApacheJMeter.jar -Jjmeter.save.saveservice.output_format=csv -n -t ../../JMX/"$jmxname" -l ../../results/"$jmxname"-reslut.jtl -e -o ../../results/HTML
fi
我现在正在尝试使用docker contaienr做一些事情,并使用了node:alpine图像,因为我的项目的其余部分均基于NodeJS,但是由于某些原因,该脚本无法在docker容器中运行,因此提供了以下内容-
line 12: syntax error: unexpected "do" (expecting "fi")
我只是不知道该怎么办,因为该脚本似乎可以在迄今为止已运行的每个系统上正常运行,并且不会抛出任何问题。
希望有人可以提供帮助
答案 0 :(得分:0)
错误消息表明脚本以'/ bin / sh'而不是/ bin / bash的身份执行。您可以使用“ / bin / sh -n script.sh”查看消息
检查脚本的调用方式。在不同的系统上,/ bin / sh被符号链接到功能较少的bash或其他shell。
特别是问题出在select
语句中,该语句包含在bash中,但不属于POSIX标准。
另一个选择是,默认情况下,将docker上的bash设置为POSIX兼容
答案 1 :(得分:0)
@ dash-o是正确的,然后添加-
RUN apk update && apk add bash
向我的dockerfile添加了bash到容器中,现在它可以正常工作了:)