您的位置:首页 > 其它

IO重定向

2013-08-29 08:59 162 查看
1. 文件输入重定向

[root@localhost ~]# echo "my name is weihongrao" >name.txt

[root@localhost ~]# echo <name.txt

my name is weihongrao

2. 用户输入重定向

当遇到“end” 输入时将停止输入,这里可以是其他的字符,一旦输入遇到这个字符就会终止输入

[root@localhost ~]# cat <name.txt

my name is weihongrao

[root@localhost ~]# cat <<lastname

> wei

> hong

> rao

> lastname

wei

hong

rao

3. 错误输出重定向

[root@localhost ~]# rm testtttttt 2>> error.log

[root@localhost ~]# cat error.log

rm: cannot remove `testtttttt': No such file or directory

[root@localhost ~]#

注:

0: 标准输入

1:标准输出

2: 标准错误

所以以上2>>为标准错误重定向

4. 同时重定向输入和输出

[root@localhost ~]# cat name.txt

my name is weihongrao

[root@localhost ~]# cat <name.txt >name2.txt

[root@localhost ~]# cat name2.txt

my name is weihongrao

[root@localhost ~]#

补充:

一些其他重定向含义

1.  &>file

输入和输出都重定向到文件

2. 另外一种创建空文件的方式

:>file 或者 >file

3. 重定向到变量作为文件名

[root@localhost ~]# cat io.sh

#!/bin/bash

filename=file.txt

echo "my name is wei hong rao">>$filename

[root@localhost ~]# bash io.sh

[root@localhost ~]# cat file.txt

my name is wei hong rao

4. >&j

   重定向stdout 到j

   所有到stdout的都传送到j

5 [j]<>file  打开file 并且把描述符号j给它,

[root@localhost ~]# echo 12345 > num.txt

[root@localhost ~]# cat num.txt

12345

[root@localhost ~]# exec 3<>num.txt

[root@localhost ~]# read -n 2 <&3

[root@localhost ~]# echo -n 999999 >&3

[root@localhost ~]# exec 3>&-

[root@localhost ~]# cat num.txt

12999999

6 n&-

关闭std n

7 0<&-, <&-

关闭stdin

8 1>&-, >&-
关闭stdout

例子:

从文件读取数据重定向到另一文件

测试数据,就两行数据

[root@hadoop ~]# cat test.txt

my name is weihongrao

my another name is jixianqiuxue

脚本

[root@hadoop ~]# cat io.sh

#!/bin/sh

exec 3<&0

exec 4>&1

exec &>result.txt

exec <test.txt

while read line

do

echo ${line}

done

exec 0<&3 3<&-

exec  1>&4 4>&-

执行脚本

[root@hadoop ~]# bash io.sh

查看结果

[root@hadoop ~]# cat result.txt

my name is weihongrao

my another name is jixianqiuxue

可以看到测试数据中的两行数据都到结果文件中了,代码中使用exec &>result.txt 本以为在代码执行结束之后在result.txt只有最后一行数据,但是两行数据都出来了,将以上代码改成exec &>>result.txt 清空result.txt

[root@hadoop ~]# :>result.txt

重新执行,结果也是两行数据在result.txt中。使用exec &>result.txt 和exec &>>result.txt的区别在于,当多次执行脚本的时候使用前者将会覆盖前一次执行的结果而后者则会追加。奇怪的是在代码中使用echo ${line},当使用前者的时候后一行并不会把前一行的数据覆盖。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: