почему мой сценарий оболочки печатает код как часть вывода - PullRequest
0 голосов
/ 25 мая 2020
#!/bin/bash

haf()
{
 sshpass -p "$1" ssh -tt -o StrictHostKeyChecking=no "$2"@"$3" <<'SSH_EOF'

 echo "request msha actions status" | /opt/tel/vs/ns/current/bin/ns_cli > txt1
 tr -s " " < txt1 > txt2
 cut -d " " -f 2 txt2 > txt3
 var1=$(<txt3)

 if [ "$var1" = "MASTER" ]
 then
        var2=1
 elif [ "$var1" = "SLAVE" ]
 then
        var2=2
 else
        var2=3
 fi
 echo $var2 > txt4
 rm txt1 txt2 txt3
 logout
SSH_EOF
 sshpass -p "$1" scp "$2"@"$3":~/txt4 .
 var2=$(<txt4)
 sshpass -p "$1" ssh -tt -o StrictHostKeyChecking=no "$2"@"$3" <<'SSH_EOF'
 rm txt4
 logout
SSH_EOF
 rm txt4
 return $var2
}

haf "$1" "$2" "$3"
FL1=$?

ВЫВОД

admin@tel:~$

/vs/ns/current/bin/ns_cli > txt1 request msha actions status" | /opt/tel
admin@tel:~$  tr -s " " < txt1 > txt2
admin@tel:~$  cut -d " " -f 2 txt2 > txt3
admin@tel:~$  var1=$(<txt3)
admin@tel:~$
admin@tel:~$  if [ "$var1" = "MASTER" ]
>  then
> var2=1
>  elif [ "$var1" = "SLAVE" ]
>  then
>         var2=2
>  else
> var2=3
>  fi
admin@tel:~$  echo $var2 > txt4
admin@tel:~$  rm txt1 txt2 txt3
admin@tel:~$  logout
Connection to 192.168.66.39 closed.
admin@tel:~$  rm txt4
admin@tel:~$  logout
Connection to 192.168.66.39 closed.
FL1=1

Правильный / желаемый результат: только FL1=1, ничего другого.

Я запускаю этот скрипт в Ubuntu 14.04 .1

1 Ответ

1 голос
/ 25 мая 2020

Когда вы передаете аргументы -tt в s sh и не не передаете какую-либо явную удаленную команду для запуска, это приводит к запуску интерактивной оболочки на удаленной стороне.

Интерактивные оболочки печатают приглашения, и они повторяют команды, которые пользователь выполняет обратно этому пользователю.

Итак, есть две вещи - либо один должен исправить эту проблему, но лучше сделать и то, и другое :

  • Прекратите использовать -tt, если у вас нет особой c, веской причины для его использования.

  • Передайте bash -s как явная удаленная команда для запуска. (Это также гарантирует, что удаленная оболочка имеет размер bash, а не /bin/sh, и, следовательно, синтаксис bash будет работать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...