我需要在shell脚本中使用ssh阅读远程目录的列表。 我正在使用Expect,而我尝试的代码是
#!/bin/expect
spawn ssh user@server 'ls -t path | head -1' > dir.txt
expect 'Password:*'
send "Password\n"
结果是未创建任何文件。 但是,如果我在shell上运行相同的命令,它将起作用
ssh user@server 'ls -t path | head -1' > dir.txt
答案 0 :(得分:1)
期望(以及它后面的Tcl)不对任何东西使用单引号,它们只是普通字符。您正在有效地这样做:
spawn ssh user@server "'ls" "-t" "path" "|" "head" "-1'" ">" "dir.txt"
我不确定,但是可以确定spawn
不会为您进行任何重定向
尝试一下:让shell进行重定向:在这里,我使用{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条规则。