bash编程新手。我不确定输出到stdout'是什么意思。这是否意味着打印到命令行?
如果我有一个简单的bash脚本:
#!/bin/bash
wget -q http://192.168.0.1/test -O - | grep -m 1 'Hello'
它向终端输出一个字符串。这是否意味着它输出到stdout' ?
由于
答案 0 :(得分:3)
是的,stdout是终端(除非使用>
运算符重定向到文件或使用|
重定向到另一个进程的标准输入中
在您的具体示例中,您实际上是使用| grep ...
通过grep重定向到终端。
答案 1 :(得分:2)
Linux系统(以及大多数其他系统)上的每个进程至少有3个打开的文件描述符:
每个文件描述符都将指向启动进程的终端。像这样:
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进程的stdout(|之前的进程)被重定向到grep进程的stdin。因此,当grep的输出是当前终端时,wget的stdout不再是终端。例如,如果要将grep的输出重定向到文件,请使用:
wget -q http://192.168.0.1/test -O - | grep -m 1 'Hello' > output.txt
答案 2 :(得分:1)
除非重定向,否则标准输出是启动程序的文本终端。
这是一篇维基百科文章:http://en.wikipedia.org/wiki/Standard_streams#Standard_output_.28stdout.29