Antwort lesen funktioniert nicht mit SSH-Bash-S-Skript

Antwort lesen funktioniert nicht mit SSH-Bash-S-Skript

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 readvolle Programm. Aber anders als Sie denken.

ssh user@hostname bash -s < "/home/xxxx/devstop.sh"

Dies weist an, ssh user@hostname bash -sseine 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 qist die Tastatureingabe.

verwandte Informationen