Pipe
少文件1 文件2 |貓——為什麼它會起作用?
當我使用時,
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'