Ich habe einige Befehle, die in meinem Skript nach Ja- oder Nein-Antworten fragen, aber der Befehl „Antwort lesen“ (interaktiver Modus) funktioniert nicht, während ich das Skript mit ausführe ssh bash -s script
.
ssh user@hostname bash -s < "/home/xxxx/devstop.sh"
Es stellt die Frage nicht von der Remote-Shell und beendet den Vorgang zur Quell-Shell.
Mein Skript:
if [ "$count" -eq "0" ]
then
echo -e "${GREEN}Tomcat Server stopped successfully on '$HOSTNAME' ${NC}"
elif [ $count -gt "0" ]
then
echo -e "${RED}Tomcat Server not stopped on '$HOSTNAME' please check it ${NC}"
echo "Do you want to continue all the tomcat server shutdown process in -`date` "
echo " Please Read the Above and Enter (Y/N) to Proceed or Stop to cancel shutdown processes : \c"
read answer
value=`echo ${answer} | tr -s '[:lower:]' '[:upper:]'`
if [ "$value" = "Y" ]
then
echo " Remaining tomcat Services are going down."
else
echo " Cancelled tomcat Services shutdown process in '$HOSTNAME."
exit 1;
fi
fi
ps -ef|grep tomcat|grep -v grep |grep -i "catalina.startup.Bootstrap start"
exit
Antwort1
Das read
volle Programm. Aber anders als Sie denken.
ssh user@hostname bash -s < "/home/xxxx/devstop.sh"
Dies weist an, ssh user@hostname bash -s
seine Standardeingabe aus der Datei abzurufen devstop.sh
. Wenn es also zu Ihrem
read answer
Es wird die nächste Zeile von stdin als Eingabe für verwendet read
. In Ihrem Skript ist dies eine leere Zeile. Aufgrund der leeren Zeile wird Ihre Antwort leer sein.
Sie können dies lokal testen:
$ cat <<EOF >it
read a
echo $a
echo $a
EOF
$ bash it
q
q
q
$ bash < it
echo $a
Die erste q
ist die Tastatureingabe.