Você não pode. No código-fonte para expect-5.45.4
, encontramos em exp_main_sub.c
na linha 711
case 'c': /* command */
exp_cmdlinecmds = TRUE;
rc = Tcl_Eval(interp,optarg);
...
que manipula o código -c
. $argv
e amigos são criados somente depois que o -c
eval termina na linha 850 em diante
/* 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);
então $argv
absolutamente não existe quando o código -c
é executado.
Uma solução alternativa é Executar uma script de espera local em um servidor remoto? que implica passar o código TCL para entrada padrão e depois ler em expect
o arquivo /dev/stdin
$ echo puts \[lindex \$argv 1\] | expect /dev/stdin blee bla blu
bla
Outra solução é jogar o shell e escrever tudo no TCL
#!/usr/bin/env expect
set FILE [lindex $argv 0]
set HOST [lindex $argv 1]
...
e, em seguida, chmod +x
e executá-lo
./whatyoucalledtheabove somefile somehost
Ele precisaria conter o que quer que seu script atual faça acima da chamada expect
...