2013-06-11 6 views
1

EDIT:переменная w/spaces + ssh

Похоже, что моя основная проблема заключается в том, что слово «пустое» пустое на удаленном хосте через каждую итерацию цикла FOR. Переменная COLORS выглядит нормально, когда я повторяю ее, она отображает все четыре цвета.

У меня есть Баш скрипт с FOR цикла называется через SSH, как это:

ssh [email protected] <<EOF 

COLORS=RED GREEN WHITE ORANGE 

for word in $COLORS; do 
echo $word 
done 

exit 
EOF 

Мой вывод выглядит это, однако:

ORANGE 
ORANGE 
ORANGE 
ORANGE 

для цикла определяет 4 пространство delmited арг в COLORS переменная, так как она прокручивается, а echos 4 раза кажется, но она отображает только последний arg, ORANGE. Что я могу изменить, чтобы каждый аргумент был эхом?

+2

Что об изменении 'ЦВЕТА = КРАСНЫЙ ЗЕЛЕНЫЙ БЕЛЫЙ ORANGE' к' COLORS = "КРАСНЫЙ ЗЕЛЕНЫЙ БЕЛЫЙ ОРАНЖЕВЫЙ" '? – fedorqui

+0

, который, похоже, не работает, я получаю эту ошибку: «echo ORANGE: Нет такого файла или каталога» – gjw80

ответ

4

2 проблемы:

  1. кавычки для присваивания значения переменной: COLORS="RED GREEN WHITE ORANGE"
  2. Побег $ при использовании в Heredoc.

Ниже код работает:

ssh [email protected] <<EOF 

COLORS="RED GREEN WHITE ORANGE" 

for word in \$COLORS; do 
echo \$word 
done 

EOF 

Я также удалил сними необходимое выездное заявление от него.

+0

не работает для меня, переменные не объявлены в скрипте. Они устанавливаются в файле свойств, который вводится в сборку. Скрипт/переменная отлично работает при запуске без ssh, но внутри он вызывает проблемы. – gjw80

+0

Хорошо ... мой ответ основывался на любом исходном скрипте, который вы дали :-) Если вы не дадите «механизм файлов свойств», который вы используете, я не смогу обновить ответ ... – anishsane

+0

Мое решение изменило переменную имя в цикле FOR вместе с экранированием $. При использовании «слова» это выглядело так, что ORANGE по-прежнему сохранялся там с первой итерации на моем локальном host01, когда я перешел на «arg», а затем избежал $ in ssh session, он работал, как ожидалось. Благодаря! – gjw80

0

положите «вокруг цветов» причина в этом пункте я думаю, что видит, что переменная цвета = оранжевый. Это мое предположение, потому что цикл for хорош.

+0

переменная или значения? – gjw80

+0

COLORS = "RED GREEN WHITE ORANGE" – Franko

4

Вам необходимо защитить переменные $COLORS и $word в вашем настоящем документе от расширения. Они распространяются на вашу локальную систему перед отправкой в ​​удаленную систему, и ваша локальная среда в настоящее время содержит эквивалент COLORS="RED GREEN WHITE ORANGE" и word=ORANGE, вероятно, потому, что вы проверили свой маленький сценарий локально, прежде чем пытаться запустить его удаленно.

Есть несколько способов сделать то, что вам нужно. Вероятно, это чистейший:

ssh [email protected] <<'EOF' 
.... 
EOF 

Примечание одиночные кавычки EOF на вводной линии. Кроме того, вы можете сохранить спецификацию здесь-ДОК, как есть, и избежать $ знаков в вашем скрипте:

ssh [email protected] <<EOF 
.... 
for word in \$COLORS; do 
    echo \$word 
done 
EOF 

Это будет защищать только определенную переменную, которые ускользают от локального расширения, и полезно в тех случаях, когда имеется некоторые переменные, которые вы хотите расширить, локализованы, а другие вы хотите расширить на удаленном конце.

0

Цитируется here documents работы:

ssh host <<'EOF' 
COLORS='RED GREEN WHITE ORANGE' 
for word in $COLORS; do 
    echo "$word" 
done 
EOF 

Некоторые примечания:

  • Вам не нужно exit.От man ssh:

    The session terminates when the command or shell on the remote machine exits and all X11 and TCP connections have been closed.

  • Use More Quotes™
Смежные вопросы