$(...)
- это синтаксис оболочки.Чтобы выполнить те же функции в 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