我们在处理脚本的运行结果时,有时候会看到类似这样的命令:

node server.js > stdout.txt 2> stderr.txt < /dev/null &
复制代码

要理解上边这句话的含义,我们需要了解的重点就在于大于号,小于号,以及数字的作用。

数字

linux 中的 IO 共有三种形式

0: 标准输入,stdin
1: 标准输出,stdout
2: 标准错误输出,stderr

方向符号

大于号>: 将产生的内容(比如日志)输出到某个文件
小于号<: 使用某个文件的内容作为标准输入

栗子拆解
  1. 标准输出
node server.js > stdout.txt &
复制代码

后台启动 server,并将标准输出写入文件 stdout.txt 中。这里没有出现数字,是因为数字被简写掉了。你也可以这样写:

node server.js 1> stdout.txt &
复制代码
  1. 标准错误输出
node server.js 2> stderr.txt &
复制代码

后台启动 server,并将标准错误输出写入文件 stderr.txt 中。

  1. 标准输入
node server.js < /dev/null &
复制代码

后台启动 server,将"黑洞"读取到的内容作为标准输入来源,因为黑洞读不到任何东西,所以这样操作是为了不再读取用户输入的内容。这里也 0< /dev/null的是简写。

one more thing
  1. > 和 >> 的不同 当 server 产生输出时,使用>会将内容输出到执行 file,再次输出时,之前生成的内容会被覆盖。如果使用>>则是内容追加操作。
  2. 标准错误输出和标准输出写入同一个文件,应该怎么写?

这样:

node server.js > stdout.txt 2> &1 &
复制代码

为什么不是这样呢?

node server.js > stdout.txt 2> stdout.txt &
复制代码

因为这样文件会被打开两次,而且内容会被最新的覆盖掉。无法起到追加的作用。使用&1,文件只打开一次,相当于将 stderr 的内容传递给 stdout 再写入到 stdout.txt 中。

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐