sh bash script pid de redirección ambigua del archivo usando comillas simples

sh bash script pid de redirección ambigua del archivo usando comillas simples

Tengo la siguiente línea nueva en mi archivo .sh

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

Cuando lo tenía entre comillas dobles, funcionó un poco, pero el pidFile tenía el pid incorrecto y estaba desviado en uno. La solución de la investigación fue utilizar comillas simples y no puedo hacer que funcionen.

Ahora me salen 2 errores

bash: $pidFile: redireccionamiento ambiguo
bash: $serviceLogFile: redireccionamiento ambiguo

¿Parece que no puedo usar variables o generar variables entre comillas simples?

Esta línea casi funciona, pero el pid tiene un error de uno.
Este código a continuación comenzaría desde el inicio, pero el pid es incorrecto.

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

que tuvo que reemplazar este antiguo código de 2 líneas con errores.

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

El código antiguo funcionaba bien pero no se podía iniciar desde el arranque.

Respuesta1

El ID del proceso tiene un error de uno porque ha puesto un extra &después del $javaCommandLine. En otras palabras, ha puesto dos procesos en segundo plano antes de llamar a echo $!, obteniendo así el PID de >>$serviceLogFile 2>&1en lugar de $javaCommandLine. Esas dos piezas deben colocarse en una, como muestran los antiguos códigos de 2 líneas.

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

Es posible que tengas que cambiarlo a...

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

información relacionada