【问题标题】:Remote ls output is not redirecting to file远程 ls 输出未重定向到文件
【发布时间】:2018-01-05 07:36:05
【问题描述】:

当我运行下面的代码时,我得到了这个错误

bash: /var/out.txt: 没有这样的文件或目录

#!/usr/bin/expect

set timeout -1    
spawn ssh user@10.103.234.1 'ls -t /var/backups/archives/' > /var/outp.log    
expect "user@10.103.234.1's password:"    
send "Password\n"    
expect eof

if [catch wait] {    
    puts "failed"    
    exit 1    
}

exit 0

【问题讨论】:

  • 您的要求甚至不清楚。你想获取本地文件中的命令输出还是目标机器中的文件?
  • expect -d /your/script.exp 看看有什么问题。
  • 需要本地文件中的命令输出
  • 在得到这个密码后,当确实期望-d`期望:设置期望输出(缓冲区)“这个系统仅供授权使用。\r\nuser@10.103.234.1的密码:”发送:发送{ exp4 } bash 的“密码\n”:/var/outp.log:没有这样的文件或目录期望:读取 eof 期望:设置期望输出(spawn_id)“exp4”期望:设置期望输出(缓冲区)“\r\nbash: /var/outp.log: 没有这样的文件或目录\r\n" `

标签: linux bash shell expect


【解决方案1】:

Expect/Tcl 不理解重定向 (>) 字符。试试这个:

spawn bash -c "ssh user@10.103.234.1 ls -t /var/backups/archives/ > /var/outp.log"

【讨论】:

  • 也尝试了双引号..仍然是同样的错误
  • 请张贴整个输出。
  • [root@cap-nwmon-01 user]# ./outp.sh spawn ssh user@10.103.234.1 ls -t /var/backups/archives/ > /var/outp.log 这个系统仅供授权使用。 user@10.103.234.1的密码:bash: /var/outp.log: No such file or directory
  • 如果你手动运行ssh user@10.103.234.1 "ls -t /var/backups/archives/ > /var/outp.log"会发生什么?
  • 手动运行时同样的错误。但是如果我像在我的原始代码中一样将双引号更改为单引号并手动运行它会起作用
【解决方案2】:

用三通替换 spawn ssh user@10.103.234.1 'ls -t /var/backups/archives/|tee -a /var/outp.log'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-03
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多