получить идентификатор процесса клиента OpenVPN в скрипте Bash

получить идентификатор процесса клиента OpenVPN в скрипте Bash

В bash-скрипте я запускаю openvpn как клиент следующим образом:

#!/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"

После успешного запуска openvpn моя переменная openvpn_pid пуста, и мой openvpn_pid_file пуст. Однако, pgrep openvpnдаст мне PID. Почему я не получаю этот PID в своем скрипте? Что мне нужно изменить, чтобы получить правильный PID в моей переменной и в конечном итоге в openvpn_pid_file?

Все это на Arch Linux.

решение1

От 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

Другими словами: $!содержит значение только если процесс находится в фоновом режиме. Потому что вы не перевели процесс в фоновый режимиз оболочки, $!пусто, и, следовательно, openvpn_pidпусто.

Что касается решения, то оно в комментарии Свена.

Что касается

Связанный контент