сценарий оболочки для запуска java cmd в l oop и запуска его параллельно с входным параметром - PullRequest
0 голосов
/ 17 июня 2020

Новичок в сценариях оболочки, пытаясь запустить программу java параллельно с портом, указанным как вход. Например ./Test.sh 8080 8081 -> Желаемый результат - дважды запустить скрипт с 2 портами. я думаю, что "&" заставит его работать ПАРАЛЛЕЛЬНО?

Помощь / руководство приветствуются.

#!/bin/bash

PORT = $1;

if [ $# -eq 0 ]
  then
    echo "No arguments supplied"
fi

for i in $PORT
  do
     java -DpropertySource=~/Downloads/app.properties -jar APP.jar                 
                -Dserver.port="$PORT"  &
 done 

1 Ответ

2 голосов
/ 17 июня 2020

Здесь есть несколько ошибок:

1) $1 будет содержать только первый параметр. Вам понадобится $*, чтобы содержать более одного. (И учитывая, что вы хотите, чтобы переменная содержала несколько портов, тогда было бы более полезно вызвать переменную PORTS.)

2) У вас не может быть пробелов вокруг = в присвоении переменной in bash.

3) Вы перебираете i, но не используете эту переменную внутри l oop. Если у вас есть -Dserver.port="$PORT", вы должны вместо этого использовать свою l oop переменную i.

4) Вам не хватает символа продолжения строки \ в конце строки java ... (убедитесь, что после него нет пробелов).

5) Разделитель команд ; в конце первой строки является избыточным (хотя на самом деле он не вредит).

6) Где вы тестируются на неправильное использование, скрипт выдаст предупреждение, но продолжит работу. Вам нужно поместить туда оператор exit. В случае сбоя рекомендуется давать ненулевое значение выхода, поэтому здесь предлагается exit 1.

Объединение этих значений:

#!/bin/bash

PORTS=$*

if [ $# -eq 0 ]
then
    echo "No arguments supplied"
    exit 1
fi

for i in $PORTS
do
  java -DpropertySource=~/Downloads/app.properties -jar APP.jar \
       -Dserver.port="$i"  &
done

Что касается &, он запустит команду в фоновом режиме, так что выполнение скрипта будет продолжено (включая затем достижение конца и выход), пока запущенная команда все еще может выполняться. Так что да, ваши java экземпляры, прослушивающие разные порты, будут работать параллельно.

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