重定向--Linux bash

重定向

I/O 重定向的符号

符号 含义
> 标准输出覆盖重定向
>> 标准输出追加重定向
> & 标识输出重定向
< 标准输入重定向
| 管道:从一个命令中读取输出作为另外一个命令的输入

Linux进程默认情况下会有三个缺省打开的文件描述符:标准输入(stdin)、标准输出(stdout)、标准错误(stderror)。它们三个所对应的整数为0、1、2,对应的物理设备为键盘、显示器、显示器

标准输出覆盖重定向

majun@instance-zqtg07w6:~$ ls
add_minus.sh         check_num.sh  export.sh  helloworld.sh  printFILE.sh  score01.sh   shift_02.sh
calllib01.sh         co.txt        file_A     lib01.sh       read.sh       score03.sh   shift_04.sh
check_file_exist.sh  countLine.sh  file_B     os_type.sh     return.sh     shell        txt
check_file.sh        digui01.sh    f.sh       power.sh       sayhello.sh   shift_01.sh  vbscan
majun@instance-zqtg07w6:~$ ls > lstxt.txt
majun@instance-zqtg07w6:~$ cat lstxt.txt
add_minus.sh
calllib01.sh
check_file_exist.sh
check_file.sh
check_num.sh
co.txt
countLine.sh
digui01.sh
export.sh
......
majun@instance-zqtg07w6:~$ ls /etc/pass11
ls: cannot access '/etc/pass11': No such file or directory
majun@instance-zqtg07w6:~$ ls /etc/pass11 2> lstxt02.txt
majun@instance-zqtg07w6:~$ cat lstxt02.txt
ls: cannot access '/etc/pass11': No such file or directory
majun@instance-zqtg07w6:~$

标准输出追加重定向

majun@instance-zqtg07w6:~$ echo wenwenwen > wen.txt
majun@instance-zqtg07w6:~$ cat wen.txt
wenwenwen
majun@instance-zqtg07w6:~$ pwd >> wen.txt
majun@instance-zqtg07w6:~$ cat wen.txt
wenwenwen
/home/majun
majun@instance-zqtg07w6:~$

标识输出重定向

对于& 1 更准确的说应该是文件描述符 1,而1标识标准输出,stdout。
对于2 ,表示标准错误,stderr。
2>&1 的意思就是将标准错误重定向到标准输出。这里标准输出已经重定向到了 /dev/null。那么标准错误也会输出到/dev/null

可以把/dev/null 可以看作"黑洞". 它等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到.

偶尔也可以把 & 在命令的最后加上,表示让程序后台执行。

majun@instance-zqtg07w6:~$ ls ttttt
ls: cannot access 'ttttt': No such file or directory
majun@instance-zqtg07w6:~$ ls ttt 2>1
majun@instance-zqtg07w6:~$ ls
1                    check_num.sh  file_A         lstxt02.txt   read.sh      shell        vbscan
majun@instance-zqtg07w6:~$ cat 1
ls: cannot access 'ttt': No such file or directory
majun@instance-zqtg07w6:~$ ls ttt 2>&1
ls: cannot access 'ttt': No such file or directory
majun@instance-zqtg07w6:~$ ls tt > err.txt 2>&1
majun@instance-zqtg07w6:~$ ls
1                    check_num.sh  export.sh      lib01.sh     printFILE.sh 
add_minus.sh         co.txt        file_A         lstxt02.txt  
check_file.sh        err.txt       helloworld.sh  power.sh     
majun@instance-zqtg07w6:~$ cat err.txt
ls: cannot access 'tt': No such file or directory
majun@instance-zqtg07w6:~$

标准输入重定向

majun@instance-zqtg07w6:~$ cat < add_minus.sh
#!/bin/bash
Add_01=10
Add_02=10
let "Add_03=(++Add_01)"
let "Add_04=(Add_02++)"
echo "add01:$Add_01"
echo "add02:$Add_02"
echo "add03:$Add_03"
echo "add04:$Add_04"
majun@instance-zqtg07w6:~$

majun@instance-zqtg07w6:~$ sort < add_minus.sh
Add_01=10
Add_02=10
#!/bin/bash
echo "add01:$Add_01"
echo "add02:$Add_02"
echo "add03:$Add_03"
echo "add04:$Add_04"
let "Add_03=(++Add_01)"
let "Add_04=(Add_02++)"
majun@instance-zqtg07w6:~$

exec

将文件内容作为标准输入

majun@instance-zqtg07w6:~$ vim command.txt
majun@instance-zqtg07w6:~$ cat command.txt
echo "aaa"
echo "bbbb"
majun@instance-zqtg07w6:~$ exec < command.txt
majun@instance-zqtg07w6:~$ echo "aaa"
aaa
majun@instance-zqtg07w6:~$ echo "bbbb"
bbbb
majun@instance-zqtg07w6:~$ exit
root@instance-zqtg07w6:~#

将文件作为标准输出

majun@instance-zqtg07w6:/root$ cd
majun@instance-zqtg07w6:~$ exec > out01.txt#将标准输出定向到文件
majun@instance-zqtg07w6:~$ pwd
majun@instance-zqtg07w6:~$ whoami
majun@instance-zqtg07w6:~$ cat out01.txt
cat: out01.txt: input file is output file
majun@instance-zqtg07w6:~$ exec > /dev/tty #重新将标准输出定向到显示器
majun@instance-zqtg07w6:~$ cat out01.txt#之前执行命令输出的文件
/home/majun
majun
majun@instance-zqtg07w6:~$

here document

Here Document 是在Linux Shell 中的一种特殊的重定向方式,它的基本的形式如下

cmd << delimiter
  Here Document Content
delimiter

其作用是将两个 delimiter 之间的内容(Here Document Content 部分) 传递给cmd 作为输入参数;

majun@instance-zqtg07w6:~$ sort << END
> AAA
> ZZZ
> DDD
> NNN
> END
AAA
DDD
NNN
ZZZ
majun@instance-zqtg07w6:~$ cat > here.txt <<END
> AAA
> VVV
> DDD
> VVVVV
> END
majun@instance-zqtg07w6:~$ cat here.txt
AAA
VVV
DDD
VVVVV
majun@instance-zqtg07w6:~$

所有的练习脚本都在:
https://github.com/SaltNego/Learn_linux_bash

发布了61 篇原创文章 · 获赞 22 · 访问量 4253

猜你喜欢

转载自blog.csdn.net/yiqiushi4748/article/details/103870734