2014-09-16 2 views
3

Я хочу запустить удаленную программу через ssh, которая требует определенной среды. Таким образом, перед выполнением программы я создаю конкретный файл, создающий среду. Если я зарегистрировался на машине непосредственно это не проблема, но когда я выполнить команду через SSHИсходный сценарий удаленно через ssh

#!/bin/bash 
foo=`ssh [email protected] "source ~/script.sh; ~/run/program"` 

Я получаю сообщение об ошибке, указывающее, что сценарий не был получен правильно. Знаете ли вы, что мне нужно сделать, чтобы получить сценарий и программу, выполненную в том же сеансе?

EDIT: Я экспортирую LD_LIBRARY_PATH со сценарием, и исполняемый файл жалуется, что он не может найти файл общих объектов. Оболочка по умолчанию - bash. «Сессия» окончательно не правильная формулировка. Я имел в виду «терминальную среду».

+2

«* Я получаю сообщение об ошибке, указывающее, что сценарий не был правильно использован. *« Вам нужно быть более конкретным, чем это. Пожалуйста, обновите свой вопрос, чтобы показать * точное сообщение об ошибке (скопируйте и вставьте его). Я просто попробовал аналогичный пример, и он сработал. –

+0

Какая ошибка? Например, если оболочка пользователя на удаленной машине равна ksh, то 'source' не будет работать, вы должны использовать' .' вместо этого. Если исходный файл не экспортирует свои переменные, программа не увидит их независимо. Кроме того, что вы подразумеваете под «той же сессией»? Программа будет работать в дочернем процессе. – cdarke

+1

Я редактировал вопрос выше. @KeithThompson: Приятно знать, что он должен работать в принципе. Я продолжаю пытаться ... – Timelimelim

ответ

1

Это может быть не самый чистый способ, но если вы вызываете bash с интерактивным вариантом (-i) и отправляете команды через стандартный ввод, он должен работать.

В частности,

foo=`ssh [email protected] bash -i <<EOF 
source ~/script.sh 
~/run/program 
EOF` 

Было бы намного проще, если у вас есть скрипт program_in_env.sh что делает ровно два шага вы хотите:

#!/bin/bash 
source ~/script.sh 
~/run/program 

Тогда вам просто необходимо позвоните по телефону ssh [email protected] program_in_env.sh.

Удачи.

0

Благодарим вас за все время и помощь. Я нашел проблему. Основная идея о том, как выполнить удаленную программу, была с самого начала. При локальном тестировании моего случая на машине текущий рабочий каталог был другим. По какой-то причине cwd важен при поиске этого сценария bash.

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