просто если условие не работает в скрипте - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть код ниже, где мое if условие не работает в простом сценарии оболочки.

#!/bin/sh

run() {
cd /tmp/in/current; java -Dlog4j.configurationFile=/tmp/in/logging/log4j2_Importer.xml -Djava.security.egd=file:///dev/urandom -classpath /tmp/in/betl-runner/lib/*:/tmp/in/lib/* baag.betl.runner.Application --config /tmp/in/config/import.dev.properties.TODO --workflow import --inputDir "$1"
}

dev_path="/tmp/in"

mode=$1

if [ "$mode" = "$dev_path"  ]; then
   run "$mode" 
fi

В состоянии if, если я просто выполняю if [ "$mode" = "" ];, то каким-то образом код выполняется, но я не знаю, почему вышеприведенное условие if не выполняется.

Ответы [ 2 ]

1 голос
/ 05 февраля 2020

Вы должны запустить свой код, передав ему аргумент (посмотрите на выражение mode=$1 в вашем коде), поскольку OP подтвердил в комментариях, что НИКАКИЕ аргументы не передаются, поэтому код, если условие не выполняется.

Запустите его следующим образом (только пример):

./script.sh "/tmp/in"

Где script.sh - код вашего сценария оболочки.

Поскольку OP упоминается в комментариях, если OP не хочет передавать аргументы в этом случае, я бы сказал:

Передача аргументов означает, что вы разрешаете людям / коду (кто бы ни запускал / вызывал код передавать свои собственные значения), поэтому, если вы этого не хотите, тогда сделайте что-то вроде mode = "Your_new_value" в вашем коде вместо mode = "$ 1". Но ИМХО, пожалуйста go из-за полной необходимости / требования вашего кода / логики c, тогда только примите какое-то решение, но это ИМХО.

1 голос
/ 05 февраля 2020

В вашем скрипте вы устанавливаете значение mode на $1, которое является первым аргументом вашего скрипта. Попробуйте назвать его так:

$ myscript /tmp/in

, где myscript - имя вашего файла шеллскрипта.

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