Скрипт оболочки для цикла: переменная странность

Мой shell-fu слаб, и эти блоки SGI (IRIX 6.5) не помогают. Это работает, как я ожидал в Linux.

Конечная цель - запустить один или несколько сценариев оболочки в удаленной системе. В соответствующем месте находится один сценарий оболочки, поэтому это должно быть просто:

$ ssh remote.host '/bin/sh -c "for s in *.sh; do echo \$s; done"'
s - Undefined variable

... да ладно Из случайного любопытства просто меняю имя переменной:

$ ssh remote.host '/bin/sh -c "for i in *.sh; do echo \$i; done"'
12

Это так же вызывает неудачу с этим:

$ ssh remote.host '/bin/sh/ -c "for s in `ls *.sh`; do echo \$s; done"'\
s - Undefined variable

Может ли кто-нибудь научить меня магическим заклинаниям для IRIX?

2 ответа

Решение

Проблема в том, что оболочкой входа на удаленный хост является csh. Одним из странных свойств csh является то, что знак доллара в двойных кавычках всегда особенный (его нельзя экранировать). Одинарные кавычки работают должным образом, если вы не используете внутри них символы новой строки (csh требует, чтобы их экранировали обратной косой чертой).

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

Мне повезло больше с:

ssh remote.host "/bin/sh -c 'for s in \`ls *.sh\`; do echo \$s; done'"
Другие вопросы по тегам