В моем скрипте есть несколько команд для запроса ответа «да» или «нет», но команда чтения ответа (интерактивный режим) не работает при запуске скрипта с использованием ssh bash -s script
.
ssh user@hostname bash -s < "/home/xxxx/devstop.sh"
он не запрашивает вопрос из удаленной оболочки и выходит в исходную оболочку.
Мой сценарий:
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
решение1
Работает read
. Но не так, как вы думаете.
ssh user@hostname bash -s < "/home/xxxx/devstop.sh"
Это говорит ssh user@hostname bash -s
, что нужно получить его stdin из файла devstop.sh
. Так что когда дело дойдет до вашего
read answer
Он возьмет следующую строку из stdin в качестве ввода для read
. В вашем скрипте это пустая строка. Из-за пустой строки ваш ответ будет пустым.
Вы можете протестировать это локально:
$ cat <<EOF >it
read a
echo $a
echo $a
EOF
$ bash it
q
q
q
$ bash < it
echo $a
Первый q
— это ввод с клавиатуры.