Как написать в cygwin pipe из c # - PullRequest
8 голосов
/ 20 мая 2019

Я хочу создать приложение на c #, которое можно будет использовать в трубе cygwin с помощью tail -f.

т.е.

tail -f SomeFile | MyCSharpApp

Я вижу (из отладки), что могу правильно читать stdinput, но ничего не записывается обратно в окна терминала cygwin.

Однако

tail -n10 SomeFile | MyCSharpApp

Работает отлично.

class Program
{
    static void Main(string[] args)
    {

        string s;
        while ((s = Console.ReadLine()) != null)
        {
           //Potentially process s here
           Console.WriteLine(s);
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 29 мая 2019

Редактировать: Этот ответ был написан неправильно о противоположности вопроса.То есть он был написан для попытки myApp > tail -f, а не tail -f file.txt > myApp.

tail -f работает с файлом, а не с каналом.Единственный способ заставить его вывести выходные данные другой команды - это использовать tail -F <(ls -lthr), где ls -lthr может быть любой командой, которая печатает выходные данные.

Давайте подумаем, почему это так.tail печатает содержимое файла (особенно строки в конце).Если у вас есть возможность печатать на консоль или стандартный вывод, вам не нужно tail.

Дополнительно: и, более того, если вы решили, что вам нужно вывести файл, вы можете просто использовать > file.txtпоместить этот вывод консоли в файл.

0 голосов
/ 24 мая 2019

Не ясно, что происходит с SomeFile.tail -f SomeFile открывает дескриптор файла SomeFile и отслеживает его.Если дескриптор как-то изменился, например, вы открыли файл в блокноте и нажали «Сохранить», ничего бы не отслеживалось.Это происходит потому, что блокнот удаляет файл и записывает новый с тем же именем.Я бы порекомендовал попробовать tail -F SomeFile. -F открывает дескриптор файла.

...