на основе комментариев Эрика Ренуфа к предыдущей итерации этого ответа о том, как nohup
и bash
сговариваются, чтобы помешать экранированию пробелов.
user="Tim Toms"
jarfile=./app.jar
SC_CD="java -jar -Xms512m -Xmx2048m -DUSER='$user' $jarfile"
echo $SC_CD > temp.sh
nohup bash temp.sh
Если бы целью было позволить этой java работать в фон, я мог бы только что сделать что-то вроде
echo java -jar -Xms512m -Xmx2048m -DUSER = \ '$ user \' $ jarfile | сейчас
и забыл о nohup
(ну и что, если, возможно, нужно очистить какое-то ненужное электронное письмо)
==== старый ответ ниже, так что комментарии имеют смысл. В противном случае забудьте ниже ====
Хотя кажется, что ваши утверждения действительно вызывают nohup
с «Тимом Томом» в одинарных кавычках, возможно, nohup
выполняет свою system ()
вызов с простой строкой вместо вызова exec
, и при этом строка теряет кавычки.
Я только что протестировал, поместив echo
перед nohup
Я не могу это проверить, но я предлагаю попробовать превратить вашу первую строку в
user = '"Tim Tom"'
, поскольку одинарные кавычки должны предотвращать раскрытие и должны передавать двойные кавычки на nohup
Я основываю это на создании тестового сценария вроде
ser="Tim Tom";
jarfile=./app.jar
SC_CD="java -jar -Xms512m -Xmx2048m -DUSER='$user' $jarfile"
echo nohup $SC_CD
, тогда когда I sh -x test.sh
Я получаю
+ user='Tim Tom'
+ jarfile=./app.jar
+ SC_CD='java -jar -Xms512m -Xmx2048m -DUSER='\''Tim Tom'\'' ./app.jar'
+ echo nohup java -jar -Xms512m -Xmx2048m '-DUSER='\''Tim' 'Tom'\''' ./app.jar
nohup java -jar -Xms512m -Xmx2048m -DUSER='Tim Tom' ./app.jar
Но внесение предлагаемого изменения дает
+ user='"Tim Tom"'
+ jarfile=./app.jar
+ SC_CD='java -jar -Xms512m -Xmx2048m -DUSER='\''"Tim Tom"'\'' ./app.jar'
+ echo nohup java -jar -Xms512m -Xmx2048m '-DUSER='\''"Tim' 'Tom"'\''' ./app.jar
nohup java -jar -Xms512m -Xmx2048m -DUSER='"Tim Tom"' ./app.jar
Обратите внимание, что в обоих случаях echo показывает, что nohup должен получать как минимум первый уровень кавычек в своих аргументах .Вот почему я предлагаю добавить дополнительный уровень