написать удаленный список, используя SSH с ожидаемым - PullRequest
0 голосов
/ 21 января 2019

Мне нужно прочитать список удаленных каталогов, используя ssh в сценарии оболочки.Я использую ожидаемый, и код, который я попробовал, является

#!/bin/expect

spawn ssh user@server 'ls -t path | head -1' > dir.txt
expect 'Password:*'
send "Password\n"

В результате файл не создается.Но если я запускаю ту же команду на оболочке, она работает

ssh user@server 'ls -t path | head -1' > dir.txt

1 Ответ

0 голосов
/ 21 января 2019
  1. ожидайте (и Tcl за этим) не используйте одинарные кавычки для чего-либо, это просто символы Вы эффективно делаете это:

    spawn ssh user@server "'ls" "-t" "path" "|" "head" "-1'" ">" "dir.txt"
    
  2. Я не уверен, но почти уверен, что spawn не делает для вас никакого перенаправления

Попробуйте это: пусть оболочка выполняет перенаправление: здесь я использую {braces}, который является способом Tcl для выполнения неинтерполирующих кавычек.

spawn sh -c {ssh user@server 'ls -t path | head -1' > dir.txt}
expect 'Password:*'
send "Password\n"
expect eof

expect eof будет ожидать завершения процесса, прежде чем разрешить продолжить выполнение сценария.


Для справки, вот руководство по синтаксису Tcl: https://tcl.tk/man/tcl8.6/TclCmd/Tcl.htm - это очень простой язык, всего 12 правил.

...