如何使用“ -c”选项将参数传递给EXPECT?

凯蒂

我使用来expect在bash脚本中使用expect -c,但是如何将参数传递给它呢?

这是我尝试过的:

FILE="myFile"
HOST="myhostname" 

/usr/bin/expect -c $FILE $HOST '
        set FILE [lindex $argv 0];
        set HOST [lindex $argv 1];
        send_user "$FILE $HOST"
        spawn scp -r -o StrictHostKeyChecking=no  $FILE root@$HOST:/tmp/
        expect "assword:"
        send "password\r"
        interact'

如果我创建一个具有相同内容的单独的Expect脚本,但是像这样在bash中调用它:

myScript.expect $FILE $HOST

它可以工作,但是除了使用expect -c选项外,我该如何做同样的事情

更新:

还尝试了:

/usr/bin/expect -c '
        set FILE [lindex $argv 0];
        set HOST [lindex $argv 1];
        send_user "$FILE $HOST"
        spawn scp -r -o StrictHostKeyChecking=no  $FILE root@$HOST:/tmp/
        expect "assword:"
        send "password\r"
        interact' $FILE $HOST

你不能。expect-5.45.4我们的源代码中,找到exp_main_sub.c第711行

            case 'c': /* command */
                    exp_cmdlinecmds = TRUE;
                    rc = Tcl_Eval(interp,optarg);
                    ...

处理-c代码。$argv和朋友仅在-c评估开始于第850行之后创建

    /* collect remaining args and make into argc, argv0, and argv */
    sprintf(argc_rep,"%d",argc-optind);
    Tcl_SetVar(interp,"argc",argc_rep,0);
    expDiagLog("set argc %s\r\n",argc_rep);

    ...
    Tcl_SetVar(interp,"argv",args,0);

因此$argv-c代码运行时绝对不存在

一种解决方法是在远程服务器上运行本地期望脚本?这需要在标准输入上传递TCL代码,然后读取expect文件/dev/stdin

$ echo puts \[lindex \$argv 1\] | expect /dev/stdin blee bla blu
bla

另一个解决方法是扔掉外壳并用TCL编写整个内容

#!/usr/bin/env expect
set FILE [lindex $argv 0]
set HOST [lindex $argv 1]
...

然后chmod +x运行它

./whatyoucalledtheabove somefile somehost

它需要在expect调用之前包含您当前的shell脚本所做的任何其他事情

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将文件的内容传递给函数的选项/参数

如何使用tee选项将参数传递给ffmpeg中的位流过滤器?

如何从C#将参考参数传递给PowerShell脚本

C ++如何将参数传递给STL函数

如何将参数传递给C中的函数指针?

如何将值传递给指针参数C ++

使用Eclipse将参数传递给C中的main

使用C中的堆栈将参数传递给函数

如何使用plenv或perlbrew将编译选项传递给perl

如何使用dart:js将选项传递给javascript函数?

如何使用 Kotlin DSL 将选项传递给 JavaPluginExtension

如何将一个参数传递给argparse,这将影响两个选项?

如何将两个参数传递给salloc的--mail-type选项?

Ember-如何将选定的选项值作为参数传递给操作处理程序

使用-n或-p选项时,是否可以将命令行参数传递给@ARGV?

c#中如何使用函数将参数传递给oracle存储过程

如何使用C#Winforms将参数传递给Powershell脚本?

如何使用Cython将python函数作为参数传递给c ++函数

如何将Java空参数传递给使用JNA编译为C代码的本机方法?

如何在Linux中使用文件或python脚本将argv参数传递给C程序?

如何使用execlp将命令行参数传递给C程序

如何使用withColumn将额外的参数传递给UDF

如何使用__new__将多个参数传递给类?

如何使用ninject将参数传递给客户提供程序

如何使用AndroidJavaObject.Call将参数传递给Java?

如何将通用参数传递给使用对象的方法?

如何使用angularjs服务将表单参数传递给Rest?

如何使用JavaScript XMLHttpRequest将多个参数传递给@RequestBody

如何使用Gradle将参数传递给main方法?