Простой способ попробовать - инициировать процесс (ssh -MS ssh.sock
), удалить сокет и попробовать, как он будет себя вести. При рабочем соединении:
$ ssh -S ssh.sock -O check <my-server>
Master running (pid=24314)
$ echo $?
0
При отсутствии сокета вы получите что-то вроде этого:
$ ssh -S ssh.sock -O check <my-server>
Control socket connect(ssh.sock): No such file or directory
$echo $?
255
Я считаю, что обработка кода возврата - это правильный способ.
Есть ли случай, когда код возврата будет ненулевым, но сам процесс будет жив?
Как и в предыдущем примере, когда сокет по какой-то причине удаляется, ваше соединение живо, но вы не можете проверить его "снаружи" и не можете подключить к нему новые сессии.
Вы можете попробовать заполнить строки формата спецификаторами нулевой длины до максимального ожидаемого количества параметров:
template_get_entry='get_entry:%s %0.0s'
Что вы можете сделать, так это получить аргумент строки формата, убрать его из списка аргументов, а затем использовать$@
:
call_api () {
fmt=$1
shift
apicmd=$( printf "$fmt" "$@" )
#...
}