Нужна помощь в решении проблемы синтаксиса BASH - PullRequest
0 голосов
/ 18 октября 2019

У меня есть сценарий sh, который я использую на компьютерах с Windows и Mac / Linux, и, кажется, он нормально работает без проблем.

#!/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

Сейчас я пытаюсь кое-что сделать с помощью докера. и использовал узел: alpine image, так как остальная часть моего проекта основана на NodeJS, но по какой-то причине скрипт не будет работать в контейнере Docker, давая следующее -

line 12: syntax error: unexpected "do" (expecting "fi")

Я просто незнать, что делать, так как, кажется, что скрипт работает для каждой системы, на которой он до сих пор работал, и не вызывает никаких проблем ..

Надеюсь, кто-то может помочь

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

@ dash-o было правильным, и добавление -

RUN apk update && apk add bash

к моему dockerfile добавило bash в контейнер, и теперь оно работает нормально:)

0 голосов
/ 18 октября 2019

Сообщение об ошибке указывает, что скрипт выполняется как '/ bin / sh', а не как / bin / bash. Вы можете увидеть сообщение с '/ bin / sh -n script.sh'

Проверьте, как вызывается скрипт. В разных системах / bin / sh является символической ссылкой на bash или другую оболочку с меньшим количеством функций.

В частности, проблема в выражении select, включенном в bash, но не являющемся частью стандарта POSIX.

Другой вариант заключается в том, что bash на вашем докере по умолчанию настроен на POSIX

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