Intro
关于IO重定向的基础知识和常见用法。
标准I/O
基本概念
标准输入/输出(standard I/O),是unix软件设计最重要的概念之一。程序应该有数据的来源端(标准输入standard input,文件描述符为0),结果数据的目的端(标准输出standard output,文件描述符为1),以及运行有问题时报告错误的地方(标准错误输出standard error,文件描述符为2)。
程序无关性
程序不必了解输入和输出背后的目的是什么设备,可能是文件,用户交互输入的命令,磁带,网络连接甚至是另一个进程。当程序被启动时,可以预期的是,系统已经准备好了标准输入、输出提供程序使用。
程序如何使用标准IO
默认情况下,程序会读取标准输入,写入标准输出,并将错误信息写入标准错误输出。默认情况下,这三个标准IO都被安排(连接)到终端。
IO重定向
IO重定向,就是改变默认I/O的来源端和目的端,也可以说"改变标准输入、输出后连接的设备"。
以<改变标准输入
-
program < file #使program从file读取输入内容,标准输入被重定向到file。
-
--------------------------------------
-
tr -d 'i' < plain.txt
以>改变标准输出
在>或>>前加上文件描述符可指定具体哪个输出被重定向
-
program > file #使program的输出写入文件file,标准输出被重定向到file,trunc模式
-
program 1> file #等价于
-
---------------------------------------------
-
tr -d 'i' < plain.txt > output.txt #删除plain.txt里的i字符,并输出到output.txt里
-
---------------------------------------------
-
program >> file #使program的输出写入文件file,标准输出被重定向到file,append模式
-
---------------------------------------------
-
for i in log.20121208.* #汇总ERROR日志
-
do
-
grep ERROR $i >> log.20121208.err
-
done
-
---------------------------------------------
-
program 1> log 2> log.err #分别重定向
-
---------------------------------------------
-
program 1> log 2>&1 #将错误输出重定向到标准输出,合并输出到一处
-
program 1> log 2>log #等价形式
-
program 1>> log 2>&1 #追加模式
注意:
">file"在file存在时,先清空file,再写入文件,因此具备覆盖性;在文件不存在时,创建之
">>file"会以追加的行为把输出附加到文件末尾。
建立管道
使program1的标准输出为program2的标准输入,即program1的标准输出被重定向到program2的标准输入。这样做的好处可以灵活拼装各种专用unix工具,形成数据的过滤器。
-
program1 | program2 #即program1的标准输出被重定向到program2的标准输入
-
--------------------------------------
-
tr -d 'i' < plain.txt | sort | grep 'be'
/dev/null和/dev/tty设备
数据黑洞:/dev/null
传送到/dev/null的数据都会被系统丢弃,当程序写入/dev/null时,会认为已结束写入操作。
-
some_command 2> /dev/null #屏蔽错误输出
终端设备:/dev/tty,可以用来实现密码读取的功能
-
echo -n "Enter the password : "
-
stty -echo #关闭自动打印输入字符的功能
-
read pswd < /dev/tty
-
stty echo #开启自动打印输入字符的功能
-
echo #换行
-
echo $pswd
附:plain.txt内容
-
#plain.txt
-
send someone to love me
-
i need to rest in arms
-
keep me safe from harm
-
in pouring rain
-
give me endless summer
-
lord i fear the cold
-
feel i''''m getting old
-
before my time
-
as my soul heals the shame
-
i will grow through this pain
-
lord i''''m doing all i can
-
to be a better man
阅读(1263) | 评论(0) | 转发(0) |