首页 > 系统 > Linux > 正文

bash重定向详解

2020-10-14 22:38:16
字体:
来源:转载
供稿:网友

    首先我们先回顾下bash现有的重定向符号
    1.重定向输入输出,目标是文件word
    [n]<word    默认n为0
    [n]>word    默认n为1
    [n]>|word   默认n为1    noclobber选项有关,直接例子就明白它的用处了
    [n]》word   默认n为1
    igi@igi-debian:~$ rm -f testfile
    igi@igi-debian:~$ touch testfile
    igi@igi-debian:~$ cat testfile
    igi@igi-debian:~$ set -o noclobber
    igi@igi-debian:~$ echo 2 >testfile
    bash: testfile: cannot overwrite existing file
    igi@igi-debian:~$ echo 2 >| testfile
    igi@igi-debian:~$ cat testfile
    2
    2.重定向标准错误和标准输出到指定文件描述符
    &>word      更通用
    >&word
    >word 2>&1
    追加输出
    &》word     没有》&word的表达方法
    》word 2>&1
    3.Here Documents
    《[-]word
    here-document
    delimiter
    -符号将删除所有行开头的tab符
    4.Here Strings
    <<<word
    5.复制文件描述符
    [n]<&word   默认n为0,如果为数字,必须得为打开的文件描述符
    [n]<&-      关闭文件描述符
    [n]>&word   默认n为1,如果为数字,必须得为打开的文件描述符
    [n]>&-      关闭文件描述符
    6.移动文件描述符
    [n]<&digit- 默认n为0
    [n]>&digit- 默认n为1
    7.以读写方式打开文件描述符
    [n]<>word   文件不在时会被创建
    如果要深刻理解重定向,先要明白以下2点
    1.shell(bash或者csh等)负责重定向,对于程序或者函数,这一切都是透明的,它只管输入输出,至于从哪输入哪输出,是shell解释器负责
    2.shell命令解析过程中,在实际执行命令前,IO重定向先设置好
    我们来看以下的例子
    1.'echo 1 a1 >a2′ 与 'echo 1 >a2 a1′
    igi@igi-debian:~$ echo 1 a1 >a2
    igi@igi-debian:~$ cat a2
    1 a1
    igi@igi-debian:~$ rm a2
    igi@igi-debian:~$ echo 1 >a2 a1
    igi@igi-debian:~$ cat a2
    1 a1
    IO重定向是在命令执行前设置好,所以上面两种情况,最后的效果一样,bash先把输出重定向到a2文件,再执行'echo 1 a1′
    2.'ls nothisfile >res 2>&1′ 与 'ls nothisfile 2>&1 >res'
    igi@igi-debian:~/rtest$ ls nothisfile
    ls: cannot access nothisfile: No such file or directory
    igi@igi-debian:~/rtest$ ls nothisfile >res 2>&1
    igi@igi-debian:~/rtest$ cat res
    ls: cannot access nothisfile: No such file or directory
(责任编辑:VEVB)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表