Непосредственная проблема заключается в том, что знаки доллара оцениваются локальной оболочкой, потому что вы не (и, вероятно, не можете) процитировать документ здесь (потому что тогда $wqr
и $loc
et c также не будут расширены оболочкой).
Быстрое решение проблемы с бэкслой sh знаков доллара, но, кроме того, я вижу несколько возможностей избавиться от не элегантных или расточительных конструкций.
ssh "$USER"@logs << EOF
zgrep "$wgr" "$loc$env/app"*"$date"* |
awk -F":" '{v = \$5 "::" \$7; split(v, f, /,/); print f[1]}' |
sort -u | xargs -I {} zgrep {} "$loc$env"/app*"$date"*
EOF
Если вы хотите добавить украшения вокруг финального zgrep
, возможно, вернитесь к while
l oop, который у вас был; но, разумеется, в этом случае вам также нужно избегать знака доллара:
ssh "$USER"@logs << EOF
zgrep "$wgr" "$loc$env/app"*"$date"* |
awk -F":" '{v = \$5 "::" \$7; split(v, f, /,/); print f[1]}' |
sort -u |
while read -r rid; do
echo Dancing hampsters "\$rid" more dancing hampsters
zgrep "\$rid" "$loc$env"/app*"$date"*
done
EOF
Опять же, любой неэкранированный знак доллара оценивается вашей локальной оболочкой даже до команды ssh
начинает выполнение.