Я работаю над проектом на C # и WPF, который предусматривает отправку команд в оболочку Linux и проверку выходных данных указанных команд.Мой проект создает ssh-соединение с использованием Renci.ssh, автоматически отправляет различные команды и выводит результаты в окно вывода консоли в созданном мной графическом интерфейсе.
У меня есть несколько методов, которые вместе отправляют команды в Linuxshell и возвращает ответ (см. ниже).
private ShellStream _ss;
private SshClient _sc;
private bool _isConnected;
public string SendReceive(string cmd, Regex expect, int numSec)
{
var r = "";
try
{
Send(cmd);
r = WaitFor(expect, numSec);
}
catch (Exception ex)
{
log.Error("Caught exception after sending cmd=" + cmd, ex);
return "";
// throw (ex);
}
return r;
}
public void Send(string cmd)
{
if (!_isConnected) throw new NotConnectedException(string.IsNullOrWhiteSpace(Name) ? "Can't send, connection not connected" : $"{Name} is not connected, can't send");
try
{
Flush(33); // flush anything in read buffer.
_ss.Write(cmd);
// Task.Run(() => Task.Delay(33)).Wait(); // give ccap time to catch up.
_ss.Write("\r");
}
catch (Exception ex)
{
log.Error("Not able to send text= " + cmd, ex);
// throw (ex);
}
}
public string WaitFor(Regex expect, int numSec)
{
if (!_isConnected) throw new NotConnectedException(string.IsNullOrWhiteSpace(Name) ? "Can't receive, connection not connected" : $"{Name} is not connected.");
var r = "";
try
{
r = Filter(_ss.Expect(expect, numSec));
}
catch (Exception ex)
{
log.Error("Caught exception waiting for response. ", ex);
return "";
}
return r;
}
Когда эти методы реализованы, команды отправляются в следующем формате:
var send = Conn.SendReceive("command text", expected_regex, 10);
При этом сохраняются как отправленная команда, так ивесь вывод в отправляет , а также печатает оба (команда и вывод) на консоль.Проблема в том, что вывод некоторых команд слишком длинный для печати в моей консоли GUI.Это очень затрудняет просмотр содержимого консоли.
В общем, я пытаюсь проверить, содержит ли вывод определенных команд указанную строку.В некоторых других случаях необходимо сохранять выходные данные одной команды для использования в другой команде.
Я не могу использовать инструменты linux, такие как | grep или | awk, чтобы ограничить мой вывод.Это связано с тем, что команда также хранится в переменной send .Таким образом, любые параметры поиска «указанной строки», которые я сообщаю | grep или | awk для поиска, будут включены в send .Поэтому, если я использую:
if (send.Contains("Specified String"))
«Заданная строка» всегда будет найдена, независимо от того, нашла ли | grep ее в выводе.
Есть ли способ, так что отправьте командув Linux выведите в консоли только команду, сохраните вывод как переменную в коде C # для использования, НО НЕ выводите вывод в консоль?