2013-12-09 6 views
0

Я запускаю код на удаленном сервере поверх ssh, но когда я пытаюсь выполнить код для сохранения в переменной «APP», он будет запускаться перед установкой файла, а также сделать это на локальном вместо пульта. Что я делаю не так?Выполнение Bash-кода перед его выполнением

ssh [email protected]$TARGET_IP << EOF 
if [ ${PACKAGE: -4} == ".dmg" ]; then 
    hdiutil attach -mountpoint $MOUNTPOINT $FILE_STORE$PACKAGE 
    APP=`sudo find $MOUNTPOINT -maxdepth 2 -name \*.app | wc -l | tr -d ' '` 
fi 
EOF 

Вот версия урезывание моего кода, я хочу, переменная APP содержит число строк 0 или 1 или более.

ответ

2

Я совершенно не понимаю, что вы хотите, но большинство, если не все ваши проблемы связаны с << EOF части:

Вы местный оболочка не уверен, расширение материала перед тем результат посылается на удаленный конец, где он выполняется. Это влияет как на материал $VAR, так и на материал backtick.

если вы используете << 'EOF', то местная замена не производится.

Если - с другой стороны - вы хотите замены переменного бота не из кавычки затем использовать это:

... << EOF 
... 
APP=\$(sudo ...) 
EOF 
+0

Я думаю, что A.H. находится на отметке. – Donovan

1

Оболочка выполняет команду в backticks перед отправкой ее команде ssh.

+0

Да, но как я могу это прекратить. Я хочу запустить команду в обратном тике после и сохранить результат в переменной. –

+0

Это может быть состояние гонки, тогда как hdiutil - это фоновые процессы, которые не заканчиваются до запуска команды sudo. Вы можете попытаться поставить спать 5 между командами и посмотреть, помогает ли это, если только для целей тестирования. Тем не менее, я все еще думаю, что оболочка интерпретирует обратные элементы перед чем-либо еще, потому что она находится в документе ЗДЕСЬ, поэтому она должна запускать эту команду перед отправкой вывода в ssh – Donovan

1

Цитирование ярлыка Heredoc будет предотвратить расширение.

Вот простая форма, которая показывает разницу:

cat << EOF 
foo=`echo foo` 
EOF 

дающий

foo=foo 

против

cat << "EOF" 
foo=`echo foo` 
EOF 

урожаи

foo=`echo foo` 

Есть много примеров here

Смежные вопросы