2013-04-10 125 views
3

bash編程的新手。我不確定'輸出到標準輸出'是什麼意思。這是否意味着打印到命令行?'輸出到stdout'是什麼意思

如果我有一個簡單的bash腳本:

#!/bin/bash 
wget -q http://192.168.0.1/test -O - | grep -m 1 'Hello' 

其輸出字符串到終端。這是否意味着它'輸出到標準輸出'?

感謝

回答

2

Linux系統(以及大多數其他)上的每個進程至少有3個開放文件描述符:

  • 標準輸入(0)
  • 標準輸出(1)
  • stderr的(2)

Regualary每此文件描述符將指向到t他從終點開始。就像這樣:

cat file.txt # all file descriptors are pointing to the terminal where you type the  command 

然而,bash允許使用input/output redirection修改此行爲:

cat < file.txt # will use file.txt as stdin 

cat file.txt > output.txt # redirects stdout to a file (will not appear on terminal anymore) 

cat file.txt 2> /dev/null # redirects stderr to /dev/null (will not appear on terminal anymore 

同樣是當您使用管道符號像發生的事情:

wget -q http://192.168.0.1/test -O - | grep -m 1 'Hello' 

是什麼實際發生的情況是wget進程的標準輸出(| |之前的進程)被重定向到grep進程的標準輸入。所以wget的stdout不再是終端,而grep的輸出是當前終端。如果你想重定向的grep的輸出,例如一個文件,然後使用此:

wget -q http://192.168.0.1/test -O - | grep -m 1 'Hello' > output.txt 
+0

所以在我的特定示例中,輸出被定向到終端,在這種情況下是標準輸出? – 0xSina 2013-04-10 23:41:44

+0

有更新一點。希望這可以讓事情更清楚。 – hek2mgl 2013-04-10 23:43:47

3

是,stdout是終端(除非它重定向到使用>操作一個文件或到使用|另一個進程的標準輸入)

在你的具體的例子,你實際上重定向然後通過grep使用| grep ...到終端。