在 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
為空。
至於解決方案,在Sven的評論中。
至於