Pipe

少文件1 文件2 |貓——為什麼它會起作用?

  • December 31, 2016

當我使用時,less file1 file2我會在“更少的緩衝區查看器”中顯示兩個文件,但less file1 file2 | cat會列印附加到標準輸出的兩個文件的內容。less 如何知道它是否應該顯示“更少的緩衝區查看器”或為下一個命令生成輸出到標準輸出?使用什麼機制來做到這一點?

less將文本列印到標準輸出。標準輸出去

  • 終端(/dev/tty?)並打開預設緩衝區查看器
  • 使用 | 將管道連接到另一個程序時通過管道 ( less text | cut -d: -f1)
  • 使用> ( )重定向文件less text > tmp

有一個名為“isa tty ”的 C 函式,它檢查輸出是否要發送到 tty(小於 4.81,main.c,第 112 行)。如果是這樣,它使用緩衝區查看器,否則它的行為類似於cat.

在 bash 中,您可以使用 test(請參閱man test

  • -t FD 文件描述符 FD 在終端上打開
  • -p 文件存在並且是一個命名管道

例子:

[[ -t 1 ]] && \
   echo 'STDOUT is attached to TTY'

[[ -p /dev/stdout ]] && \
   echo 'STDOUT is attached to a pipe'

[[ ! -t 1 && ! -p /dev/stdout ]] && \
   echo 'STDOUT is attached to a redirection'

引用自:https://unix.stackexchange.com/questions/333743