Скрипт оболочки для цикла: переменная странность
Мой 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'"