Я знаю, что ответ немного запоздал, но я искал, как это сделать, и использование nc не было вариантом из соображений безопасности, так что вот он, если он может кому-то помочь.
Чего не хватало в вашем первоначальном эхе, так это переключателя -e:
-e enable interpretation of backslash escapes
-E disable interpretation of backslash escapes (default)
И новая строка + команда quit для выхода из telnet после отключения. Таким образом:
echo -e '\035\nquit' | telnet 10.0.0.1 23 && echo "success" || echo "failed"
Очевидно, то же самое будет работать, если вы используете оператор if в блочном стиле и вычисляете $? как вы делали вначале:
echo -e '\035\nquit' | telnet 10.0.0.1 23
if [ $? -eq 1 ]
then
echo "Console is down."
fi
Пока мы на этом, что касается nc, это зависит от того, какой вариант nc у вас есть (gnu ncat против nmap -ncat ). Gnu будет иметь переключатель -z :
. -z Zero-I/O mode, report connection status only
nc -z 10.0.0.1 23
# (evaluate $? here)
в то время как другой не будет, и вам придется передать пустую строку на ваш NC, чтобы не застрять:
echo | nc 10.0.0.1 23
# (evaluate $? here)
Вы можете установить trap
в .bashrc
, который запускается при выходе из оболочки :
Что-то вроде
trap 'test -n "$SSH_AGENT_PID" && eval "$(/usr/bin/ssh-agent -k)"' 0
При необходимости добавьте подпрограмму в.bash_logout