2015-06-18 3 views
0

Я использую 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, чтобы преодолеть это? Любая помощь приветствуется ..

+0

Любая причина, по которой вы не можете просто разобрать '^ M'? –

+0

@ Тит-анализ - это другой аспект, но я хочу знать причину этого. Спасибо – Shriram

+1

Аналогичный ответ на этот 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

ответ

-2

Вы можете попробовать выполнения ниже команды в патч в вашей оболочке Linux:

SED -nl your java code file

вы можете узнать, есть некоторые \r в вашем коде, и я что это '^ M' Я думаю, вы написали эти коды в ОС Windows, где разделитель строк «\ r \ n» NOT «\ n».

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