<与>的用法

在shell进程中,最常用的FD(file descriptor)大概有三个,分别为:

0:Standard Input(STDIN)

1:Standard Output (STDOUT)

2:Standard Error Output (STDERR)


在标准情况下,这些FD分别跟如下设备(device)关联:

stdin(0):keyboard

stdout(1):monitor

stderr(2):monitor


可用 < 來改变读进的数据通道(stdin),使之从指定的档案读进。

可用 > 來改变送出的数据通道(stdout, stderr),使之输出到指定的档案。

严格来说, < 符号之前需要指定一个FD的(之间不能有空白),

因为0是 < 的预设值,因此 < 与 0< 是一样的。


<< 的用法:

这是所谓的 HERE Document,它可以让我们输入一段文本,直到读到 << 后指定的字串。


* 1> :改变stdout的数据输出通道

* 2>  :改变stderr的数据输出通道

两者都是将原本要送出到monitor的数据转向输出到指定的档案去。

由于 1 是 > 的预设值,因此, 1> 与 > 是相同的,都是改变stdout。


* 2>&1 :就是将stderr并进stdout作输出

* 1>&2 或 >&2 :就是将stdout并进stderr作输出


在Linux文件系统里,有个设备档位于/dec/null。

这个null在I/O Redirection中的作用:

* 若将FD1 跟 FD2 转到 /dev/null 去,就可以将stdout 与 stderr 弄不见掉。

* 若将 FD0 接到 /dev/null 來,那就是读进 nothing。


&> 与 >& 的作用是将 stdout 与 stderr 输出到同一文件。

>> :追加到文件内容的后面。


set -o noclobber

设置使已存在的文件的内容不能覆盖,只能追加在文件内容的后面。 取消时使用 set +o noclobber

注:不取消set -o noclobber设置而又“临时“覆盖文件的内容:使用 “ >| ”(>与| 之间不能有空白


例:

$ echo "some text here" > file 
$ cat < file 
some text here 
$ cat < file > file.bak 
$ cat < file.bak 
some text here 
$ cat < file > file 
$ cat < file 

其中$ cat < file > file 之后原本有内容的档案结果却被洗掉了!

这是priority(优先权)的问题:

* 在IO Redirection 中,stdout 与 stderr 的管道会先准备好,才会从stdin读进资料。

也就是说,在上例中, >file 会先将file 清空,然后才读进 <file,

这时文件file已经被清空了,因此就会变成读不进任何资料了。


pipe line “ | ”

* 上一个命令的stdout 接到下一个命令的stdin 去了!

* 在pipe line 之间,前一个命令的stderr 是不会接进下一个命令的stdin的,

其输出若不用2> 导到file 去的话,它还是送到监视器上面來!


tee命令:

* 所谓tee 命令是在不影响原本I/O的情况下,将stdout 复制一份到文件里去。

例:

cm1 | cm2 | tee file | cm3 

在预设上,tee 会改写目标文件,若要改为增加内容的话,可用 -a 参数达成。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值