IO 重定向

一、标准输入输出

  对于shell来说,有三个基础的流,标准输入流(stdin或者stream 0),标准输出流(stdout或者stream 1),标准错误流(stderr或者stream2)。

   举个例子,当我们用键盘在shell中执行命令的时候,可以如下图:

   通常,stdout跟stderr都输出到了屏幕上,但对于Linux来说,其实是两种不同的输出。

二、输出重定向

   可以用>大于号将stdout重定向到另一个IO,比如文件:

# echo "hello" > test.log
# cat test.log
hello

   上面的命令将stdout重定向到文件test.log中,此时,如果该文件不存在则创建新文件,如果存在则覆盖已有文件。事实上,>重定向是1>的简写,1>可以更清楚的看到实际上是把stdout(stream 1)重定向。

   必须注意的是,默认情况下,该重定向会覆盖已有文件,这个在有时候可能不经意间丢失重要数据。shell提供了选项使得我们可以禁止这种覆盖,set -o noclobber可以打开该选项。

# cat test.log
hello
# set -o noclobber
# echo "world" > test.log
-bash: test.log: cannot overwrite existing file

   此外,在打开该选项之后,其实还是可以强制执行覆盖,可以采用>|来强制重定向到已存在的文件:

# echo "world" > test.log
-bash: test.log: cannot overwrite existing file
# echo "world" >| test.log
# cat test.log
world

 三、追加输出

   可以采用>>将输出重定向到文件并追加在文件结尾,这样就可以避免覆盖文件了。

# cat test.log
world
# echo hello >> test.log
# cat test.log
world
hello

四、输入重定向

  可以采用 将输入重定向,其实是 0< 的简写。

# cat <stdout.log

  还可以<<EOF通过手动输入直到输入EOF

  <<< 可以直接将一个字符串重定向给输入

# base64 <<< hello

猜你喜欢

转载自www.cnblogs.com/lyw-hunnu/p/12004116.html