Ожидайте Script scp последнего файла в директой - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь найти последний файл с удаленного компьютера, но получаю сообщение об ошибке;

не могу прочитать "(ssh root@1.1 ....." ls -t / test / *txt | head -1 ")": такой переменной нет

мой ожидаемый сценарий;

spawn scp -r   root@$remote_ip:/test/$(ssh root@$remote_ip "ls -t /test/*txt | head -1") /mypath

как мне получить последний файл с удаленного компьютера с ожидаемым сценарием?

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

$(...) - это синтаксис оболочки.Чтобы выполнить те же функции в Tcl / ожидаемо, используйте команду exec.

spawn scp -r root@$remote_ip:/test/[exec ssh root@$remote_ip "ls -t /test/*txt | head -1"] /mypath

Это не обязательно должна быть одна строка, для удобства обслуживания разделите ее

set latest [exec ssh root@$remote_ip "ls -t /test/*txt | head -1"]
spawn scp -r root@$remote_ip:/test/$latest /mypath

Однако я подозреваю, что вы используете ожидаемую отправку паролей:

spawn ssh root@$remote_ip "ls -t /test/*txt | head -1"
expect "password"
send "$passwd\r"
expect eof
# parse $expect_out(buffer) to extract the file

Но ваша жизнь станет намного проще, если вы настроите аутентификацию по ssh-ключу и вообще не ожидаете:

ssh-keygen
ssh-copy-id root@$remote_ip
latest=$(ssh root@$remote_ip "ls -t /test/*txt | head -1")
scp -r root@$remote_ip:/test/$latest /mypath
0 голосов
/ 04 октября 2018

scp -r root @ $ remote_ip: ssh root@$remote_ip ls /test/* -1td | head -1 /mypath/.

...