2017-07-03 89 views
1

我正在使用chilkat lib讓我的覆盆子pi的ssh。 我想用ssh發送一個命令並接收輸出。 問題總是我發送一個命令,我收到一堆文本。SSH - 治療輸出

例子:

The programs included with the Debian GNU/Linux system are free software; 
the exact distribution terms for each program are described in the 
individual files in /usr/share/doc/*/copyright. 

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent 
permitted by applicable law. 
Last login: Fri Jun 30 23:17:28 2017 from desktop-ca160hm.local 
./status.sh 
echo 'end' 
[email protected]:~$ ./status.sh 
0 
[email protected]:~$ echo 'end' 
end 
[email protected]:~$ 

但我只想從命令搶0./status.sh

我已經嘗試使用:

output = output.substr(output.find_first_of(str) + str.length(), 1); 

哪裏str是用命令的變種「./status.sh」和output是帶有來自ssh的文本的字符串。

output.find_first_of(str)總是返回0

全功能:

string s7c_SFTP::SendCmd(string str, bool out) 
{ 
    if (s7c_SFTP::bloked) return "blocked"; 
    int channelNum = s7c_SFTP::ssh.QuickShell(); 
    if (channelNum < 0) return s7c_SFTP::ssh.lastErrorText(); 
    CkString cmd; 
    str = str + "\n"; 
    cmd.append((char *)str.c_str()); 
    cmd.append("echo 'end'\n"); 
    if (!s7c_SFTP::ssh.ChannelSendString(channelNum, cmd.getStringAnsi(), "ansi")) 
    { 
     cout << "[WARNING] Unable to contact with the device!" << endl; 
     return s7c_SFTP::ssh.lastErrorText(); 
    } 
    if (!s7c_SFTP::ssh.ChannelSendEof(channelNum)) return s7c_SFTP::ssh.lastErrorText(); 
    if (!s7c_SFTP::ssh.ChannelReceiveUntilMatch(channelNum, "end", "ansi", true)) return s7c_SFTP::ssh.lastErrorText(); 
    if (!s7c_SFTP::ssh.ChannelSendClose(channelNum)) return s7c_SFTP::ssh.lastErrorText(); 
    if (!s7c_SFTP::ssh.ChannelReceiveToClose(channelNum)) return s7c_SFTP::ssh.lastErrorText(); 
    if (out) 
    { 
     string output = s7c_SFTP::ssh.getReceivedText(channelNum, "ansi"); 
     output = output.substr(output.find_first_of(str) + str.length(), 1); 
     cout << output.c_str() << endl; // Only for debug 
     return output; 
    } 
    else return ""; 
} 

回答

0

解決!

當我通過var str到函數我加\n模擬輸入。

而當我製作string.find_fist_of();\n並沒有找到,所以返回0.