работа - командная строка linux книга



передать stdout в качестве имени файла для командной строки? (4)

Я работаю с утилитой командной строки, которая требует передачи имени файла для записи вывода, например

foo -o output.txt

Единственное, что он пишет для stdout - это сообщение, указывающее, что оно успешно выполнено. Я хотел бы иметь возможность передать все, что записано в output.txt в другую утилиту командной строки. Моя мотивация заключается в том, что output.txt окажется 40-гигабайтным файлом, который мне не нужно сохранять, и я предпочел бы передавать потоки, чем работать с массивными файлами, поэтапно.

Есть ли способ в этом сценарии output.txt реальный вывод (т.е. output.txt ) другой команде? Могу ли я каким-то волшебным образом передать stdout в качестве аргумента файла?


Решение 1. Использование замещения процесса

Самый удобный способ сделать это - использовать замену процесса. В bash синтаксис выглядит следующим образом:

foo -o >(other_command)

Решение 2. Использование явных каналов явно

Вы можете сделать это явно / вручную следующим образом:

  1. Создайте именованный канал, используя команду mkfifo .

    mkfifo my_buf
    
  2. Запустите другую команду с этим файлом в качестве входного

    other_command < my_buf
    
  3. Выполнить foo и записать его на my_buf

    foo -o my_buf
    

Решение 3. Использование /dev/stdout

Вы также можете использовать файл устройства /dev/stdout следующим образом

foo -o /dev/stdout | other_command

Вы можете использовать магию UNIX и создать именованный канал :)

  1. Создать трубопровод

    $ mknod -p mypipe
    
  2. Начать процесс, который читается из трубы

    $ second-process < mypipe
    
  3. Запустите процесс, который записывается в трубу

    $ foo -o mypipe
    

Ради того, чтобы сделать счастливым, позвольте мне написать достаточно длинное предложение, потому что мое предлагаемое решение составляет всего 18 символов вместо требуемого 30+

foo -o /dev/stdout

Я использую / dev / tty как имя выходного файла, эквивалентное использованию / dev / nul /, когда вы вообще ничего не хотите выводить. Тогда | и все готово.





pipe