sh script bash redirecionamento ambíguo pid do arquivo usando aspas simples

sh script bash redirecionamento ambíguo pid do arquivo usando aspas simples

Eu tenho a seguinte nova linha no meu arquivo .sh

su --session-command='$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile' $serviceUser || return 1

Quando eu tinha aspas duplas, funcionou um pouco, mas o pidFile tinha o pid errado e estava errado por um. A solução da pesquisa foi usar aspas simples e não consigo fazer aspas simples funcionarem.

Eu recebo agora 2 erros

bash: $pidFile: redirecionamento ambíguo
bash: $serviceLogFile: redirecionamento ambíguo

Parece que não posso usar variáveis ​​ou gerar variáveis ​​entre aspas simples?

Esta linha quase funciona, mas o pid está desativado em um.
Este código abaixo iniciaria na inicialização, mas o pid está errado.

su --session-command="$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1

que teve que substituir esse código antigo de 2 linhas com erros.

cmd="nohup $javaCommandLine >>$serviceLogFile 2>&1 & echo \$! >$pidFile"
# Don't forget to add -H so the HOME environment variable will be set correctly.
sudo -u $serviceUser -H $SHELL -c "$cmd" || return 1

O código antigo funcionou bem, mas não pôde ser iniciado na inicialização.

Responder1

O ID do processo está desativado em um porque você colocou um extra &após o $javaCommandLine. Em outras palavras, você colocou dois processos em segundo plano antes de chamar echo $!, obtendo assim o PID >>$serviceLogFile 2>&1em vez de $javaCommandLine. Essas duas peças devem ser colocadas em uma, como mostra o antigo código de 2 linhas

 su --session-command="$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1

Talvez seja necessário alterá-lo para -

 su --session-command="$javaCommandLine >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1

informação relacionada