Почему этот SSH-клиент использует «zDonez»? - PullRequest
0 голосов
/ 06 сентября 2011

Я работаю над приложением, которое будет получать файлы на сервер через SFTP, используя JSch .

1004

Я просто могу понять, для чего переменная TERMINATOR:

private static final String TERMINATOR = "zDonez";  

Почему это использует "zDonez"?

Ответы [ 2 ]

2 голосов
/ 06 сентября 2011

«zDonez» - произвольная строка, которая не будет отображаться в выходных данных ни одной из команд, которые вы запускаете.Если это так, вам нужно выбрать другое значение для TERMINATOR.Цель этого - определить, когда команда закончила выполняться.

1 голос
/ 06 сентября 2011

Как уже сказал Клас, в этом случае zDonez - это просто строка, которая будет напечатана удаленной оболочкой после выполнения исходной команды.

command += "; echo \"" + TERMINATOR + "\" \n";

Таким образом, метод getServerResponse() может знать, когда команда завершена, и возвращать правильную строку.

Я бы сказал, что это не лучшее использование типа канала shell, который должен использоваться только для интерактивного использования, т. Е. Когда пользователь решает, когда вводить следующую команду. (У большинства оболочек есть подсказка по этой причине.)

Лучшим способом было бы использовать отдельный канал exec для каждой команды (или серии команд), хотя тогда вы не можете использовать cd или аналогичные команды, изменяющие состояние, поскольку каждый канал exec будет иметь свой собственная оболочка.


Для SFTP вам вообще не нужно выполнять удаленные команды - используйте ChannelSftp вместо exec или shell канала. В дистрибутиве JSch по умолчанию приведен пример Sftp, в котором показано, как использовать любые операции, поддерживаемые этим классом.

Более общая документация содержится в Руководстве по JSch в вики .

(Отказ от ответственности: я написал это неофициальный JSch Javadoc (на основе официальных источников), а также большую часть текста в Руководстве по Вики).

...