En un script bash, estoy iniciando openvpn como cliente de esta manera:
#!/bin/bash
conf_file=/etc/openvpn/blahblah.conf
openvpn_pid_file="/var/run/openvpn-client/ovpnc.pid"
command_line="/usr/bin/openvpn --config $conf_file --daemon"
$command_line
openvpn_pid=$!
echo "openvpn_pid=$openvpn_pid"
echo $openvpn_pid >> "$openvpn_pid_file"
Después de un inicio exitoso de openvpn, mi variable openvpn_pid está vacía y mi openvpn_pid_file está vacío. Sin embargo, pgrep openvpn
me dará el PID. ¿Por qué no aparece ese PID en mi script? ¿Qué debo cambiar para obtener el PID correcto en mi variable y, finalmente, en openvpn_pid_file?
Todo esto está en Arch Linux.
Respuesta1
De man bash
:
! Expands to the process ID of the job most recently placed into the background, whether executed as an asynchronous command or using the bg builtin
En otras palabras: $!
sólo contiene un valor si el proceso está en segundo plano. Porque no hiciste un proceso en segundo plano.desde el caparazón, $!
está vacío y, por tanto, openvpn_pid
está vacío.
En cuanto a la solución, está en el comentario de Sven.
Como para