Я использую java 1.7 и trilead ssh library для выполнения команд в среде Linux.Причина для^M при выполнении java-программы
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.trilead.ssh2.ChannelCondition;
import com.trilead.ssh2.Connection;
import com.trilead.ssh2.Session;
public class TestSSH
{
private static final String ipAddress = "ipaddress";
private static final String username = "username";
private static final String password = "password";
private static final int port = 22;
private static Connection connection;
private static Session mySession;
private static OutputStream inStream;
private static InputStream outStream;
private static InputStream errStream;
public static void main(String[] args)
throws IOException
{
String prompt = initPrompt();
}
private static String initPrompt()
throws IOException
{
boolean isAuthenticated = false;
String myPrompt = "";
connection = new Connection(ipAddress, port);
connection.connect(null, 30 * 1000, 0);
isAuthenticated =
connection.authenticateWithPassword(username, password);
if (!isAuthenticated)
{
System.exit(1);
}
System.out.println(" Authenticated !....");
mySession = connection.openSession();
mySession.requestPTY("dumb", 256, 24, 0, 0, null);
mySession.startShell();
inStream = mySession.getStdin();
outStream = mySession.getStdout();
errStream = mySession.getStdout();
try
{
writeInput(inStream, "ls -ltr /;echo [[COMMAND_EXIT_CODE=$?]];");
flushOutput(inStream);
int len = outStream.read(buffer);
StringBuilder outputString = new StringBuilder();
if (len > 0)
{
outputString.append(new String(buffer, 0, len, "utf-8"));
output.append(outputString.toString());
}
}
}
Я выполнив программу в Linux Mahcine Redhat 6.4 OS (как локальный источник и то есть назначения такие же), и получение ниже вывод.
output:
com.xxx.yyy output: ^M
Last login: Fri Jun 12 09:19:03 2015 from x.x.x.x^M^M
prompt-1:~ # ^M
SC-1:~ # echo COMMAND^M
COMMAND^M
prompt-1:~ #
Fri Jun 12 09:19:03 2015 from x.x.x.x^M^M
prompt-1:~ # ^M
prompt-1:~ # echo COMMAND^M
COMMAND^M
prompt-1:~ #
Я ожидаю выход, как и без^М (строки), так что я могу принести быструю ожидаемый выход. Может ли кто-нибудь сказать мне причину, по которой^M добавляется в выход. Я не получаю^M в других машинах. В других машинах встречаемость встречается очень редко.
Есть ли какая-либо конфигурация, которая должна быть изменена в моей ОС для преодоления этой проблемы? Есть ли что-то, что мне нужно настроить в java, чтобы преодолеть это? Любая помощь приветствуется ..
Любая причина, по которой вы не можете просто разобрать '^ M'? –
@ Тит-анализ - это другой аспект, но я хочу знать причину этого. Спасибо – Shriram
Аналогичный ответ на этот http://stackoverflow.com/questions/5843495/what-does-m-character-mean-in-vim. М^будет возвратом каретки. Для чего установлен System.lineSeparator()? Вы можете увидеть значение Hex, используя System.out.println («Line sep:» + org.apache.commons.codec.binary.Hex.encodeHexString (System.lineSeparator(). GetBytes())); – slarge