Вы не можете. В исходном коде для expect-5.45.4
мы находим в exp_main_sub.c
в строке 711
case 'c': /* command */
exp_cmdlinecmds = TRUE;
rc = Tcl_Eval(interp,optarg);
...
, который обрабатывает код -c
. $argv
и друзья создаются только после того, как -c
eval завершится в строке 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
...
По сути, ваш экземпляр php на сервере пропустил несколько расширений (, и он все еще пытается их загрузить, предполагая, что эти расширения все еще присутствуют в дополнительных конфигурациях php (, поэтому сначала попробуйте проверить эти дополнительные конфигурации в подкаталогах /etc/php. и закомментируйте их (точные, которые удаляют ошибки в настоящее время )и после простой переустановки их с помощью команды менеджера пакетов (yum upgrade php -opcache, fe -для centos или для debian/ubuntu -apt переустановите php -opcache и то же самое для всех остальных модулей, которые упоминались ранее