2015-05-11 2 views
0

Я пытаюсь выполнить скрипт оболочки (который использует скрипт perl и другие скрипты оболочки) из java-программы, однако я не увенчались успехом, вот что я пробовал:Выполнение сценария оболочки (сценарий оболочки, который использует perl и другие скрипты оболочки) в Linux из java

на сервере Linux, в папке test1/testJava следующие сценарии доступны:

  1. decode24.sh (основной сценарий я называю из Java программы, это сценарий использует другие сценарии, перечисленные ниже)
  2. fram.sh
  3. shadow.pl
  4. light.sh

Вот что я пытаюсь от Java:

try { 
     ConnBean cb = new ConnBean("xx.yyy.zz.p", "user","passme"); 
     ssh = SSHExec.getInstance(cb); 
     CustomTask ct1 = new ExecShellScript("/test1/testJava", "./decode24.sh", "arg1"); 
     ssh.connect(); 
     net.neoremind.sshxcute.core.Result res = ssh.exec(ct1); 
}catch...... 

Результат после выполнения:

сообщение об ошибке:

./decode.sh[17]: shadow.pl: not found [No such file or directory] 
./decode.sh[21]: fram.sh: not found [No such file or directory] 
+0

Ошибка, которую вы получаете, поступает из этого сценария оболочки. Вы уверены, что используете его в правильном рабочем каталоге и убедитесь, что все файлы исполняемы? – GiantTree

+0

Как выглядит ваш decode.sh? Вероятно, у вас нет '. /' Перед скриптами, которые вы пытаетесь запустить, и он не может найти их на пути где-то –

ответ

1

Ошибка возникает из вашего сценария decode.sh. Он не может найти сценарии shadow.pl и fram.sh, которые он выполняет. Вероятно, потому что CWD или путь не установлены в директорию скрипта при запуске скрипта.

Самый надежный способ решить это - изменить ваш скрипт decode.sh, чтобы использовать абсолютные пути к сценариям shadow.pl и fram.sh. Таким образом, вы можете выполнить decode.sh из любого каталога.

Если вы используете bash, проверьте this вопрос для аккуратного способа разрешить абсолютный каталог сценариям, чтобы избежать жесткого кодирования пути.

+0

Благодарим вас за быстрый ответ. Однако если по какой-либо причине я не могу изменить путь к абсолютному пути на decode.sh, разве нет способа запустить скрипт decode.sh из java? – Thinking

+0

Я слишком мало знаю о третьей библиотеке, которую вы используете для выполнения команд. Возможно, вы можете предоставить среду с лучшим PATH или установить его правильно. Тем не менее, самый лучший способ - сделать скрипты оболочки лучше, и вы будете избегать будущих подобных проблем при их использовании. –

0

Пусть decode.sh узнает каталог, в котором он находится (см. bash solution), и используйте путь для вызова других.

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