shell中的I/O重定向介绍,供大家学习参考。
当用户登录linux系统时,系统已经将标准输入,标准输出,标准出错打开,并且默认是终端。
shell中的I/O重定向就是通过和终端交互,或者是在shell脚本中设置,从新安排从哪里输入和将数据输出到哪。
重定向和管道
(1)重定向输入“<”
program < file 可以将program的标准输入修改为file。例如:
tr -d 'r' < kou.txt
(2) 重定向输出“>”
program > file 可以将program的标准输出修改为file。例如:
tr -d 'r' < kou.txt > file2.txt
意思是:从kou.txt读入数据,删除文件中的回车,然后将结果输出到file2.txt
(3)追加重定向输出">>"
program >> file 可以将program的标准输出修改为file,但是和重定向输出的不同是:它并不会覆盖掉原来file中的数据,而是追加到末尾。
(4)管道
program1 | program2 可以将program1的标准输出修改成program2的标准输入, 这样可以比使用临时文件效率快好多,例如:
tr -d 'r' < file1 | sort > file2
意思是:从file1中读入数据然后删除文件中的回车后,将其数据排序,并输出到file2. 例子中删除回车后的数据的输出作为排序操作的输入。
最后是shell中两个比较重要的特殊文件:/dev/null和/dev/tty
/dev/null是一个位桶,送到其中的文件都会被丢掉,即彻底删除。
/dev/tty当程序打开此文件时,linux会自动将其重定向到一个终端(一个 实体控制台或者一个串行端口,或者是一个通过网络和窗口登录的伪终端)在 和程序结合,这在程序必须读取人工输入时特别有用。
例如:
printf "Enter new password:" #输出提示信息
stty -echo #关闭自动打印输入字符的功能
read pass < /dev/tty #读取密码
printf "Enter again:" #输出提示信息
read pass2 < /dev/tty #读取密码
stty echo #打开自动打印输入字符的功能
...