Как передать параметр с пространством в 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 

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

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

  • если всегда false с равными переменными
  • Объединение нескольких функций в один скрипт bash
  • Как использовать вывод команды для процесса в цикле в Bash?
  • Как выводить результат команды find, которая исключает определенное расширение файла
  • Переменная Bash $ {0 ## * /}
  • получение неожиданной ошибки EOF
  • Напишите сценарий для создания пользователей с заранее определенными паролями
  • Проблемы копирования файлов с пробелами внутри имени файла в сценарии bash
  • 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 должен получать по крайней мере первый уровень котировок в своих аргументах. Вот почему я предлагаю добавить дополнительный уровень

    Linux и Unix - лучшая ОС в мире.