Ожидайте: как получить доступ к переменным и командам - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь выполнить цикл for, чтобы я мог прочитать каждый файл из вывода ls в моем ожидаемом скрипте.

/usr/bin/expect << 'EOF'
set timeout -1
spawn ssh root@server
expect { 
            "*assword: " 
       }
send "_t00rhs!\r"
expect { 
            "*]# " 
       }

send 'for item in "\$(ls)" do sort -k1 -n ${item}; done \r'
expect { 
            "*]# " 
       }

Вывод показывает, что он не получилзначение для элемента.

]0;root@atddpvm13:~[?1034h[root@atddpvm13 ~]# can't read "item": no such 
variable
while executing
"send 'for item in "\$(ls)" do sort -k1 -n ${item}"

1 Ответ

0 голосов
/ 20 ноября 2018

Со стороны ожидания:

  • одинарные кавычки не имеют никакого особого значения в ожидании
  • используйте фигурные скобки для не интерполирующих кавычек
  • однако последовательность \rне будет интерпретироваться в скобках

Итак, вы получите

send {for item in $(ls); do sort -k1 -n "$item"; done}
send "\r"

Со стороны оболочки

Вы хотите

send "printf '%s\n' * | sort -k1 -n\r"
# or
send "ls -1v\r"
...