bash編程的新手。我不確定'輸出到標準輸出'是什麼意思。這是否意味着打印到命令行?'輸出到stdout'是什麼意思
如果我有一個簡單的bash腳本:
#!/bin/bash
wget -q http://192.168.0.1/test -O - | grep -m 1 'Hello'
其輸出字符串到終端。這是否意味着它'輸出到標準輸出'?
感謝
bash編程的新手。我不確定'輸出到標準輸出'是什麼意思。這是否意味着打印到命令行?'輸出到stdout'是什麼意思
如果我有一個簡單的bash腳本:
#!/bin/bash
wget -q http://192.168.0.1/test -O - | grep -m 1 'Hello'
其輸出字符串到終端。這是否意味着它'輸出到標準輸出'?
感謝
Linux系統(以及大多數其他)上的每個進程至少有3個開放文件描述符:
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
是,stdout是終端(除非它重定向到使用>
操作一個文件或到使用|
另一個進程的標準輸入)
在你的具體的例子,你實際上重定向然後通過grep使用| grep ...
到終端。
除非重定向,否則標準輸出是啓動程序的文本終端。
這裏有一個維基百科的文章:http://en.wikipedia.org/wiki/Standard_streams#Standard_output_.28stdout.29
所以在我的特定示例中,輸出被定向到終端,在這種情況下是標準輸出? – 0xSina 2013-04-10 23:41:44
有更新一點。希望這可以讓事情更清楚。 – hek2mgl 2013-04-10 23:43:47