这行 bash 脚本的作用是什么?

这行 bash 脚本的作用是什么?
nohup tensorflow_model_server \
  --rest_api_port=8501 \
  --model_name=fashion_model \
  --model_base_path="${MODEL_DIR}" >server.log 2>&1

我在张量流服务指南中看到了这个这里。我想知道 的含义> server.log 2>&1。我有点知道这是关于保存stdout到一个文件,然后保存stderr到另一个我不知道它是什么的文件。

答案1

此重定向的目的是stderr输出写入服务器日志。

当您使用像这样的重定向时

some command > file.txt

它仅将程序写入的输出保存到stdout通常连接到控制台的标准输出流。

然而,大多数程序都遵循将错误消息写入不同输出流的良好实践,stderr虽然这些错误消息也打印在控制台上,但可以单独“捕获”和重定向,以确保错误消息不会在“ verbose”程序的正常输出。

然而,这也可能成为一个问题:如果您仅将某些冗长(因此通常无人值守)编译过程的“正常”输出重定向到文件中,则警告和错误只会打印到控制台。如果现在您稍后回来检查结果,您将在日志文件中看到标准的“一切正常”输出,并在控制台中看到看似不相关的错误输出。

因此,将错误输出“也重定向”到文件会很有帮助,以便所有消息都“在上下文中”。

这里的机制是

  • 首先重定向stdout到文件(command > file这部分可以明确写为command 1>file1指示流的文件描述符stdout

  • stderr也以“合并”方式将 重定向到stdout(这就是语法为 的原因2>&1&意思是“复制”文件描述符),众所周知stdout已经重定向到文件。

进一步阅读的好地方可能是

相关内容