Macos 预期返回错误“;选项需要一个参数";当给出论据时

Macos 预期返回错误“;选项需要一个参数";当给出论据时,macos,expect,Macos,Expect,我有以下代码: #!/bin/sh if [ "upload" == $1 ];then expect -c <<'END_EXPECT' set timeout -1 spawn sftp -i /Users/myuser/.ssh/private.key root@dev.site.org expect "sftp>" send "put dirname $0/$2/$3 /var/www/localhost/htdocs/dev1.site.org/$2/$3\r" ex

我有以下代码:

#!/bin/sh
if [ "upload" == $1 ];then
expect -c <<'END_EXPECT'
set timeout -1
spawn sftp -i /Users/myuser/.ssh/private.key root@dev.site.org
expect "sftp>"
send "put dirname $0/$2/$3 /var/www/localhost/htdocs/dev1.site.org/$2/$3\r"
expect "%100"
send "quit\r"
expect eof
END_EXPECT
elif [ 'download' == $1 ];then
expect -c <<'END_EXPECT'
set timeout -1
spawn sftp login_name@1.2.3.4
expect "[Pp]assword:"
send "login_password\r"
expect "sftp>"
send "get /remote_path/$2/$3 dirname $0/$2/$3 \r"
expect "%100"
send "quit\r"
expect eof
END_EXPECT
fi

我在OSX 10.9中。为什么它不起作用?我过去从未使用过expect…

在此处文档中传递expect脚本时取出
-c



此外,您引用了here doc terminator一词:
非常感谢。。。你是对的。根本不需要使用expect。我已经向我正在使用的插件的github站点提交了一个问题()问题:有没有办法让ssh连接处于活动状态?我的服务器限制在600秒的时间内最多从同一台服务器连接5次。所以对于发展来说这是没有用的。。。如何使连接保持活动状态并在以后重新使用?谢谢,如果你能帮我…强烈建议你问一个新问题,这样其他人就会看到。首先想到的是和你的系统管理员谈谈。谢谢Glenn。。实际上我管理服务器,所以我增加了连接数。。。但这不是一个好的做法,我不喜欢它。。。我会的。谢谢
expect: option requires an argument -- c
usage: expect [-div] [-c cmds] [[-f] cmdfile] [args]
send "put dirname $0/$2/$3 /var/www/localhost/htdocs/dev1.site.org/$2/$3\r"
#!/bin/sh
if [ "upload" == "$1" ];then
    expect <<END_EXPECT
        set timeout -1
        spawn sftp -i /Users/myuser/.ssh/private.key root@dev.site.org
        expect "sftp>"
        send "put $(dirname $0)/$2/$3 /var/www/localhost/htdocs/dev1.site.org/$2/$3\r"
        expect "%100"
        send "quit\r"
        expect eof
END_EXPECT
elif [ 'download' == "$1" ];then
    expect <<END_EXPECT
        set timeout -1
        spawn sftp login_name@1.2.3.4
        expect "[Pp]assword:"
        send "login_password\r"
        expect "sftp>"
        send "get /remote_path/$2/$3 $(dirname $0)/$2/$3 \r"
        expect "%100"
        send "quit\r"
        expect eof
END_EXPECT
fi
case "$1" in
    upload)
        cmd="put $(dirname $0)/$2/$3 /var/www/localhost/htdocs/dev1.site.org/$2/$3"
        ;;
    download)
        cmd="get /remote_path/$2/$3 $(dirname $0)/$2/$3"
        ;;
esac
echo "$cmd" | sftp -i /Users/myuser/.ssh/private.key root@dev.site.org