Это связано с аргументом, заключенным в двойные кавычки send
- Tcl развернет любое значение $variables
в строке в двойных кавычках.
Возможно, вы захотите изменить
expect "*#" { send "cd /directory && du -h 2>/dev/null | awk '{ if ($1 ~ /G/) {print $0}}' | grep './' | awk -F '.' '{print $3}'\r" }
к этому, используя фигурные скобки для предотвращения расширения переменной
expect "*#" {
send {cd /directory && du -h 2>/dev/null | awk '$1 ~ /G/ && /.\// {print $0}' | awk -F '.' '{print $3}'}
send "\r"
}
Ах, да, я вижу главную проблему: ваш ожидаемый код находится в оболочке heredoc, и это зависит от расширения переменной. Это происходит раньше, чем ожидают, даже запущен.
Секретный соус здесь состоит в том, чтобы сказать оболочке заключить в кавычки весь документ здесь:
expect << 'EOF'
...
EOF
Теперь $1
и $0
будут оставлены для awk.