Powiedzmy, że istnieje program, który przyjmuje dwa argumenty; plik wejściowy i plik wyjściowy.
Co jeśli nie chcę zapisać tego pliku wyjściowego na dysk, a raczej przekazać go bezpośrednio stdin
innemu programowi. Czy istnieje sposób na osiągnięcie tego?
Wiele poleceń, na które natrafiłem w systemie Linux, udostępnia opcję przekazania „-” jako argumentu pliku wyjściowego, który robi to, co określiłem powyżej. Czy to dlatego, że przekazanie stdin
programu jako argumentu nie jest możliwe? Jeśli tak, to jak to robimy?
Przykładem tego, w jaki sposób obrazowałbym za pomocą tego jest:
pdftotext "C BY BRIAN W KERNIGHAN & DENNIS M RITCHIE.pdf" stdin(echo)
Powłoka, której używam, to bash.
cat < README.txt | cp /dev/fd/0
. Powiedziałcp: missing destination file operand after ‘/dev/fd/0’ Try 'cp --help' for more information.
program input-file /dev/stdout | another-program
? Zauważ też, że echo
nic nie czyta ze standardowego wejścia.
cp
nigdzie nie można utworzyć pliku. echo 1 2 3| cp /dev/fd/0 /dev/tty
wydrukuje 1 2 3
. Nawiasem mówiąc, /dev/fd/[num]
jest bardziej prawdopodobne, że zadziała niż /dev/std(in|out|err)
w większości przypadków. Zobacz Przenośność linków deskryptorów plików, aby dowiedzieć się, gdzie możesz pracować.
cat <file | cmd /dev/fd/0
działa na większości jednorożców.