к примеру запустив grep hello мы обнаружим ожидание ввода (stdin), попробуем набрать hello1234543 и grep сообщит об удачном поиске и выведет нам ту же строку, но не завершит свое выполнение. grep не завершится, пока мы не введем ctrl+D либо ctrl+C. Можно сделать вывод что и конвейер в конце пересылки добавляет ctrl+D.
Это откуда такая уверенность?
да, вы абсолютно правы, средства программирования позволяют сменить или добавить символ окончания строки. Просто по дефолту у всех команд ввода символ окончания строки \n :)
vasek
где [targets] по существу можно считать потоком ввода данных (stdin)
я не совсем с этим согласен. [targets] это аргумент(ы) командной строки. Поправьте, если ошибаюсь.
heider
Почему это не стал? Вы набрали команду и нажали Enter, таким образом из стандартного ввода прилетела пустая строка.
Если бы pacman ожидал что-либо из стандартного потока ввода, он бы не продолжил свою работу, не встретив \n. По аналогии как и scanf приостанавливает поток, пока не встретит \n . Нажимая Enter в первый раз я всего лишь запускаю программу.
да, действительно, все крутится вокруг функции isatty(). Я и не слышал о такой, теперь буду знать)
Спасибо всем участникам темы)
все равно не совсем понятны некоторые детали. Я писал на c++ и имею представление что такое потоки ввода и вывода и аргументы командной строки.Попробовал запустить pacman как вы указали
[[email protected] ~]$ sudo pacman -S -
error: argument '-' specified without input on stdin
но pacman не стал ждать ввода, а сразу завершился. Как он определил что ввод осуществлялся не через конвейер?
Я предполагаю, что в pacman существует проверка значения stdin на несоответствие консольному stdout, но опять же - консоль тоже программа, или у них особые идентификаторы?
почему некоторые команды принимают в stdin данные, а некоторые нет?
я не совсем понимаю эту конструкцию
pacman -Rns $(pacman -Qtdq)
Мне не важно готовое решение, просто хочу лучше понять конвейеры.Так почему же мой пример не сработал?
Здравствуйте.Пытаюсь оптимизировать свою работу используя конвейер.Запускаю команду:
pacman -Qdt | sudo pacman -R
Но это не работает
error: no targets specified (use -h for help)
Вообще пытаюсь удалить неиспользуемые зависимости
На флешке у меня исходники сервера, apache(пользователь http) должен иметь к ним доступ, иначе ошибка 403.