需要帮助来解决BASH语法问题

时间:2019-10-18 11:18:34

标签: node.js bash shell docker sh

我有一个在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")

我只是不知道该怎么办,因为该脚本似乎可以在迄今为止已运行的每个系统上正常运行,并且不会抛出任何问题。

希望有人可以提供帮助

2 个答案:

答案 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到容器中,现在它可以正常工作了:)