Если вы действительно посмотрите на код, getExitStatus на самом деле не является состоянием выхода команды, которую вы выполнили, это состояние выхода «Канала», который был только что создан для выполнения вашей команды. Ниже приведено единственное место во всей кодовой базе, где оно фактически установлено:
case SSH_MSG_CHANNEL_OPEN_FAILURE:
buf.getInt();
buf.getShort();
i=buf.getInt();
channel=Channel.getChannel(i, this);
if(channel==null)
{
//break;
}
int reason_code=buf.getInt();
//foo=buf.getString(); // additional textual information
//foo=buf.getString(); // language tag
channel.exitstatus=reason_code;
channel._close=true;
channel._eof_remote=true;
channel.setRecipient(0);
break;
"channel.exitstatus = reason_code;" это код вопроса И, как вы можете видеть, он установлен только при ошибке открытия канала. В противном случае это будет значение по умолчанию -1.
Я полагаю, что Тамир намеревался использовать это немного шире, но никогда не делал этого.
В любом случае, он никогда не был предназначен для той цели, для которой вы пытаетесь его использовать.
Если вы подключаетесь к машине на основе Linux, единственный способ, с помощью этой библиотеки, получить код возврата команды, это завершить ваш командный вызов с помощью «echo $?», Поэтому вы можете использовать
sshExec.RunCommand(command + ";echo $?");
А затем проанализируйте возвращение для этого кода команды в конце. Может быть, даже префикс его с чем-то легко разбирается, например, echo "RETURNCODE" $?