obtener la identificación del proceso del cliente openvpn en el script bash

obtener la identificación del proceso del cliente openvpn en el script bash

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 openvpnme 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_pidestá vacío.

En cuanto a la solución, está en el comentario de Sven.

Como para

información relacionada