получение пользовательского ввода в то время, когда SSH вставлен в другое окно - PullRequest
1 голос
/ 13 августа 2011

У меня есть скрипт bash, который в основном должен работать, как показано ниже:

  • получить номер сборки от пользователя и поместить его в buildNum var

  • подготовить сборку на локальном компьютере, вызвав локальный скрипт с buildNum в качестве аргумента

  • sftp предварительно подготовленного zip-файла на удаленный сервер1

  • Сделайте это:

ssh -v $server1 <<EOF
rm -rvf path1-on-remote-server1/*
cd path2-on-remote-server1
unzip ../prepped-zip-file-$buildNum.zip
exit
EOF
  • sftp предварительно подготовленного zip-файла на удаленный сервер2

Проблема, с которой я столкнулся, заключается в том, что на четвертом шаге числа 4 $ buildNum не известен удаленному серверу, и он завершается ошибкой.

Я попробовал следующие два решения, но оба не удалось:

  1. используйте двойные кавычки "unzip ../prepped-zip-file-$buildNum.zip", что привело к "unzip ../prepped-zip-file-11.6.zip: Command not found.

  2. попытался снова получить номер сборки от пользователя во время сеанса SSH, который снова не удался, даже не дождавшись моего ввода и поиска zip-файла без номера сборки в конце имени, как var был пуст,

я сделал:

ssh -v $server1 <<EOF
   rm -rvf path1-on-remote-server1/*
   cd path2-on-remote-server1
   echo "enter build num once more: "
   read bNum
   unzip ../prepped-zip-file-$bNum.zip
   exit
   EOF

Любые предложения о том, как добиться того, к чему я стремлюсь.

Заранее спасибо

Ответы [ 2 ]

3 голосов
/ 13 августа 2011

Вы уверены, , что это не работает?

ssh -v $server1 <<EOF
rm -rvf path1-on-remote-server1/*
cd path2-on-remote-server1
unzip ../prepped-zip-file-$buildNum.zip
exit
EOF

Когда я пробую это на моей машине, с cat вместо ssh -v $server1 для тестирования, переменная делаетподставить в здесь-документ, как если бы весь документ был в командной строке.Оболочке удаления никогда не нужно знать, что в начале была переменная.

На самом деле, вы можете задать удаленную команду в командной строке ssh, а не перенаправлять стандартный ввод.Это было бы более надежно, если бы некоторые его части неожиданно решили попробовать прочитать из stdin:

ssh -v $server1 "rm -rvf path1-on-remote-server1/*
  cd path2-on-remote-server1
  unzip ../prepped-zip-file-$buildNum.zip"

(обратите внимание, что многострочные строки в двойных кавычках подходят для bash).

0 голосов
/ 13 августа 2011
#!/bin/sh
printf "Enter Build Number: "
read BUILD_NUM
cat << EOF | ssh $server1
hostname
echo "${BUILD_NUM}"
uptime
EOF

Это работает для меня.

...