Как передать параметр с пространством в nohup?

У меня есть скрипт для запуска банки, как показано ниже.

user="Tim Tom"; jarfile=./app.jar SC_CD="java -jar -Xms512m -Xmx2048m -DUSER='$user' $jarfile" nohup $SC_CD 

И сообщение об ошибке

 Error: Unable to access jarfile Tom 

Итак, я понимаю, что это слово после пробела как имя бана.

Поэтому, мой вопрос: как передать параметр с пространством в нем?

One Solution collect form web for “Как передать параметр с пространством в nohup?”

основанный на комментариях Эрика Ренуфа по предыдущей итерации этого ответа о том, как 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 | at now

и забыл о nohup (так что, если, возможно, есть какая-то мусорная электронная почта для очистки)

==== старый ответ ниже, так что комментарии имеют смысл. Забудьте ниже иначе ====

Хотя кажется, что ваши заявления на самом деле звонят nohup с «Tim Tom» в одинарных кавычках, возможно, 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 

тогда, когда я 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 

Обратите внимание, что в обоих случаях эхо показывает, что nohup должен получать по крайней мере первый уровень котировок в своих аргументах. Вот почему я предлагаю добавить дополнительный уровень

  • Обрежьте значение, исходящее из поля awk
  • тянущие линии, связанные с датой
  • не может определить ошибку в сценарии оболочки неожиданный оператор
  • Почему этот скрипт не принимает два аргумента?
  • помощь в создании sh
  • переформатирование команды вывода в сценарии bash
  • условные включения ifdef для оболочки
  • Можно ли заменить «затем» на скобки?
  • как копировать файлы, такие как Microsoft Robocopy, в debian?
  • вставить значение из ссылочного файла
  • Тихая установка сценария оболочки с использованием файла bash
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.