2015-11-02 3 views
0

у меня есть это:Проблемы с несколькими командами JSch?

ChannelExec channel1 = (ChannelExec) session.openChannel("exec"); 
String command1 = "/opt/deluge/latest/bin/deluge-console -c ./.config/deluge"; 
String commandCon = "connect 127.0.0.1:2035"; 
String location = channelSftp.getHome(); 
String command2 = "add " + location + "/torrent1.torrent"; 
channel1.setCommand(command1 + "\n" + commandCon + "\n" + command2); 
channel1.connect(); 

Но это не добавляет файл, который я пытаюсь добавить.

Полная команда мне нужно

/opt/deluge/latest/bin/deluge-console -c ./.config/deluge 

Тогда, как только мы начали deluge-console, он делает

connect 127.0.0.1:2035 

для подключения к демону, а затем

add /home/hd1/testuser/torrent1.torrent 

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

ответ

0

Команды, которые вы указываете с помощью .setCommand, являются командами, которые должны выполняться оболочкой.

Они не эквивалентны «линиям», вы вводите на терминал SSH.

Таким образом, команда connect будет выполнена после выхода deluge-console, что никогда не произойдет, так как deluge-console ждет своих команд на своем стандартном входе.


Решения:

  • труб команды к deluge-console, как:

    (echo connect ... ; echo add ...) | deluge-console ... 
    
  • Подача команды в запущенной deluge-console с использованием стандартного ввода (channel1.getOutputStream)

    См. Sudo.java JSc h пример.

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