2016-07-28 1 views
0

Я сошел с ума, пытаясь сделать это.Bash ожидают две команды в том же процессе

Мне нужно использовать, чтобы установить пару паролей. Проблема в том, что мне нужно запустить две команды в одном процессоре.

Здесь код

yum install -y expect 
    secret="price_aws_git_secret.txt" 
    eval $(ssh-agent) 
    pass=$(cat $secret) 
    expect << EOF 
      spawn ssh-agent ssh-add price_aws_github 
      expect "Enter passphrase" 
      send "$pass\r" 
      spawn git clone [email protected]/repo.git 
      expect "Are you sure you want to continue connecting" 
      send "yes\r" 
      expect eof     
    EOF 

Первой команда добавить в SSH-агент ключа SSH, а вторая команда клон мерзавца должна быть в том же самом процессе, чтобы получить этот агент.

Смотря документацию и примеры Я не могу видеть, как ожидание может работать с двумя командами в одном процессе.

Любое предложение?

Спасибо!

+0

Как обычно, вы можете избежать «ожидать», установив вместо этого аутентификацию с открытым ключом. – chepner

+0

Это то, что я сделал, но даже добавив публичный ключ в github, вам нужно предоставить пароль, когда вы хотите добавить закрытый ключ в ssh-add – paul

+0

. Вы идете на большие длины. Почему бы вам не создать ключ без кодовой фразы? –

ответ

2

Предложения по использованию ключей ssh ​​лучше в сторону, чтобы ответить на ваш вопрос. В то же время вам не нужно взаимодействовать с двумя процессами. Вам необходимо обработать первый, затем запустить второй:

expect << EOF 
     spawn ssh-agent ssh-add price_aws_github 
     expect "Enter passphrase" 
     send "$pass\r" 
     # assume this works. if not, there's more work to do 
     expect eof 
     close 

     spawn git clone [email protected]/repo.git 
     expect "Are you sure you want to continue connecting" 
     send "yes\r" 
     expect eof     
EOF