美文网首页
expect 中处理重定向

expect 中处理重定向

作者: 9a78541e0250 | 来源:发表于2017-12-07 19:33 被阅读487次

先说结果,下面这个expect脚本会执行错误,其原因是spawn不能响应Linux中的重定向,也就 2>&1 这个部分。

  #!/usr/bin/expect -f
  spawn ./shadowsocks.sh 2>&1 | tee shadowsocks.log   //执行错误

通过Google在Stack Overflow上找到了解决方法。修改如下:

  #!/usr/bin/expect -f
  spawn bash -c "./shadowsocks.sh 2>&1 | tee shadowsocks.log"

原址链接

——————————————————————————

下面是啰嗦,可以不看。

在vps上安装ss(翻墙)时,使用root用户登录,运行以下命令:

  wget --no-check-certificate -O shadowsocks.sh https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks.sh
  chmod +x shadowsocks.sh
  ./shadowsocks.sh 2>&1 | tee shadowsocks.log

在ssh登录时,网上抄了一份expect脚本来自动登录,例如:

注1:如果你想使用,请不要照抄,很可能执行失败

  #!/usr/bin/expect -f
  set user 用户名
  set host IP地址
  set password 密码

  spawn ssh $user@$host
  expect {
      "yes/no" {
          send "yes\r"
          exp_continue
        }
      "password:" {
        send "$password\r" 
      }
  }
 interact

之后就想安装ss的3条命令,也可以这样执行啊,然后自己就写了一个expect脚本,保存为 ss.exp

注2:如果你想使用,请不要照抄,很可能执行失败

#!/usr/bin/expect -f
set timeout -1
spawn wget --no-check-certificate  https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks.sh

expect "#"
spawn chmod +x shadowsocks.sh
expect "#"
spawn ./shadowsocks.sh 2>&1 | tee shadowsocks.log


expect {
    "*Default password*" {
        send "\n"
        exp_continue
    }
    "*Default port*" {
        send "\n"
        exp_continue
    }
    "*Which cipher you'd select*" {
        send "7\n"
        exp_continue
    }
    "*Press any key to start*" {
        send "\n"
        exp_continue
    }
    "#" {
        send "\r"
    }
}
interact

好,写完了,上传到vps上,同样用expect写的上传脚本

#!/usr/bin/expect -f
set pwd 密码

spawn scp 本地文件名 访问地址的用户名@IP地址:/目录
#例:spawn scp ss.exp root@127.0.0.1:/root
expect "password*"
send "$pwd\r"

interact

Linux执行安装expect的命令

sudo apt-get install expect

安装完成后,执行命令

expect ss.exp //这是刚刚上传的文件

报错,会提示

shadowsocks.sh argument error 什么的,懒得补错误提示了。

找了好久,才发现

./shadowsocks.sh 2>&1 | tee shadowsocks.log

原来这个命令中的 2>&1 ,叫重定向,而expect好像不支持Linux中的重定向。
经过2天的Google后终于找到了文章开头的处理方法。

相关文章

  • expect 中处理重定向

    先说结果,下面这个expect脚本会执行错误,其原因是spawn不能响应Linux中的重定向,也就 2>&1 这个...

  • Linux Shell交互式自动化运维程序

    Expect是Linux操作系统下的一个用来处理交互操作,系统默认是没有安装expect库,所以执行expect会...

  • 重定向与请求转发(转载)

    请求重定向:由客户重新发起请求 请求转发:由服务器自己内部分派请求给另一内容处理 重定向 servlet中重定向方...

  • 请求重定向与请求分派

    请求重定向由客户重新发起请求请求分派有服务器自己内部分派请求给另一内容处理 重定向 servlet中重定向方法: ...

  • expect 用法(监控脚本)

    关于expect expect #自动应答命令用于交互式命令的自动执行spawn #expect中的监控程序,其运...

  • HTTP接口设计

    状态码 请求成功 重定向 重定向的新地址都需要在响应头 Location 中返回 客户端出错 服务端出错 错误处理...

  • [Linux-CMD]-expect

    转发文章来自:这里和这里 一、简述 Expect是一个用来处理交互的命令。借助Expect,我们可以将交互过程写在...

  • Android面试题疑难点

    一. Android WebView内处理302重定向 答:开发中处理WebView有面临着以下几个问题: H5页...

  • Spring MVC 表单处理

    表单处理 静态页面返回和页面重定向

  • expect - 自动交互脚本

    expect - 自动交互脚本 目录 expect参数 expect教程中文版 expect中文手册 expect...

网友评论

      本文标题:expect 中处理重定向

      本文链接:https://www.haomeiwen.com/subject/reejixtx.html