Программа, которая может буферизовать stdin или файл

Помимо использования временного файла, который может помочь, существует ли способ / программа, способный записывать входные данные из stdin но не выводит содержимое до получения EOF . Я также не хочу использовать переменную оболочки (например, buffer=$(cat) ).

Эта программа должна вести себя следующим образом (предположим, что имя программы buffered-cat ):

 $ buffered-cat line 1 line 2 line 3 ^D # Ctr-D here(End of Line) 

Теперь, когда программа получила ^D , buffered-cat выводит содержимое

 line 1 line 2 line 3 

  • Перенаправление tr stdout в файл
  • Как в режиме реального времени выводить вывод, содержащий индикатор выполнения?
  • Сохранить количество строк, выводимых в переменную в сценарии оболочки, не потребляя выход
  • неожиданный вывод с помощью grep
  • в сценарии bash; процесс stdout как аргумент имени файла терпит неудачу, когда вы открываете его более одного раза
  • stdout, stderr и протоколирование с помощью команды script
  • Pipe stdout to obexftp bluetooth transfer?
  • Почему я не могу читать / dev / stdout с помощью текстового редактора?
  • 6 Solutions collect form web for “Программа, которая может буферизовать stdin или файл”

    sponge бедняка с помощью awk :

     awk '{a[NR] = $0} END {for (i = 1; i <= NR; i++) print a[i]}' 

    Если у вас есть tac , вы также можете злоупотреблять им:

     ... | tac | tac 

    Вы можете сделать это с помощью sponge из более полезных продуктов . sponge будет «впитывать стандартный ввод и записывать в файл». Без аргументов этот файл является стандартным. Ввод, заданный этой команде, сохраняется в памяти до EOF, а затем записывается все сразу.

    Для записи в обычный файл вы можете просто указать имя файла:

     cmd | sponge filename 

    Основная цель sponge – разрешить чтение и запись из одного и того же файла в конвейере, но он делает то, что вы хотите.

    Пока ваш ввод ASCII-текста (не содержит NUL 0x0 байт до конца), тогда sed -z делает то, что вы хотите:

     $ sed -z '' Line 1 Line 2 Line 3 ^D Line 1 Line 2 Line 3 $ 

    -z заставляет sed обрабатывать байт NUL в качестве разделителя строк вместо обычной новой строки. До тех пор, пока ваш ввод является обычным текстом без байтов NUL, тогда sed продолжит считывать весь ввод в свой буфер шаблонов до тех пор, пока не будет достигнута EOF. sed не выполняет обработку буфера и выводит его.


    Если в вашем входе присутствуют NUL байты, вы можете сделать это вместо этого:

     sed ':l;N;bl' 

    Это решение sed немного больше, чем DigitalTrauma, но также работает с NUL байтами.

     sed -n 'H;${x;s/^\n//;p}' 

    Поведение, о котором вы просите, не является ли поведение по умолчанию простым котом?

     gv@debian:$ cat << EOF #or cat <<EOF >file or cat <<EOF >/dev/stdout > Line 1 > Line 2 > Line 3 > EOF Line 1 Line 2 Line 3 gv@debian:$ 

    Та же идея, что и пример awu muru, кроме Python. Используйте Ctrl D, чтобы прекратить чтение строк

     $ python -c 'import sys;print("".join(sys.stdin.readlines()))' line1 line2 line3 # press Enter and Ctrl+D at this point line1 line2 line3 
    Interesting Posts

    Проверьте, содержит ли строка строку подстроки

    Как pdflush, kjournald, swapd и т. Д. Взаимодействуют?

    Как создать сетевой интерфейс без генерации связанного маршрута?

    Shomehow rx / tx-счетчики на интерфейсе сбрасываются

    Как создать сценарий оболочки, который отправляет результат в процесс

    Почему загрузка с SD-карты с моим пользовательским ядром приводит к «VFS: не удается открыть корневое устройство»?

    Как узнать, какая конкретная электронная почта в Thunderbird / Icedove содержит вредоносное ПО Doc.Dropper.Agent-1552723, на которое указывает Clamscan?

    Я получаю сообщение об ошибке при загрузке разделяемых библиотек libXm.so.3

    XFCE – узнать, какая команда выполняется с помощью данного пункта меню

    Debian Lenny Server скомпрометирован – нет знака точки вторжения?

    Воспроизведение аудиофайла при повторении между x hour и y hour?

    Выполнить команду в нескольких активных оболочках одновременно

    Что означает ответ « + выход 1»?

    Как я могу исправить расположение polkit и glib include headers?

    Нужно ли инкапсулировать переменные awk в кавычки для их дезинфекции?

    Linux и Unix - лучшая ОС в мире.