Как передать аргумент команды, такой как $ (date + "% Y"), от bash до java? - PullRequest
1 голос
/ 10 апреля 2020

Я знаю, что мы можем передать аргумент в bash через Runtime в java. У меня есть особый случай, я хочу передать аргументы типа $ (date + "% Y" "% m") в качестве параметра в bash, который, в свою очередь, будет вычислен и сохранен в переменной в bash. Рассмотрим следующий java код:

String[] cmd = {"/bin/bash", "/user/username/test.sh", "firstparameter", "date +%Y", "folder_$(date +%Y)";
Process process = Runtime.getRuntime().exec(cmd);

Приведенная выше команда запускает тест сценария оболочки. sh. Мой сценарий выглядит следующим образом:

first=$1
year=`$2`
foldername=`$3`

echo $first
echo $year
echo $foldername

Я включил обратные пометки в мой код bash, чтобы аргумент, переданный через программу java, мог быть выполнен первым. Вывод команды будет таким:

firstparameter
2020
$(date: not found

Я хочу, чтобы bash имел имя папки в виде folder_2020. Как мы можем достичь этого? Я пытался много раз, но не смог добиться успеха. Любая помощь будет высоко оценена.

1 Ответ

2 голосов
/ 10 апреля 2020

Вы можете заменить последний аргумент:

"folder_$(date +%Y)"

на

"date +folder_%Y"

Превращение аргумента в допустимую команду гарантирует, что она будет выполняться так, как задумано в сценарии оболочки.


В качестве альтернативы вы можете оставить свой последний аргумент как есть и вместо этого изменить свой сценарий оболочки.

Заменить это присвоение переменной:

foldername=`$3`

следующим:

eval "foldername=\"$3\""

Вызов eval позаботится о выполнении любой подстановки команд, встроенной в $3.

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