修改 2>&1 以便输出转到特定文件并且任何错误或其他输出转到我可以监控的日志文件?

修改 2>&1 以便输出转到特定文件并且任何错误或其他输出转到我可以监控的日志文件?

我正在读这篇文章但我并不完全明白答案。

我想知道我是否可以修改它,它叫什么,命令重定向?

我想要的是:

  1. 不要挂起,使用 & 符号&继续执行下一个命令
  2. 将命令生成的数据输出到文件data.json
  3. 运行命令时遇到的任何问题、错误消息或问题都会将其输出到 bqlog.txt

这可能吗?

例如我目前有这个命令:

bq query --max_rows=1000000 --use_legacy_sql=false --format=json --batch=true --headless=true 'select * from `ga4-extract.analytics_123456789.events_'"$RUNDATE"'`;' > data.json

大约 30 分钟后它失败了,我看不到输出或问题是什么。这是在 github 操作运行器上,工作流的控制台输出只给出失败状态,但对于此工作流来说,没有控制台输出指示错误,这是独一无二的。

我想修改我的命令,以便我可以像已经那样输出到 data.json,然后继续下一步,使用以下代码监控 bqlog.txt 文件:tail -F bqlog.txt

答案1

是的,这是可能的。

2>&1含义如下:

2 : stderr
> : output redirect
& : copy file descriptor
1 : file descriptor 1

因此:stderr 输出重定向到文件描述符 1 (stdout) 指向的任何地方。默认值:屏幕。

这意味着,stderr 被输出到屏幕上。

您的问题是,如何将命令的输出重定向到文件 1,并将 stderr 重定向到另一个文件?

你的命令变成:

command >output1.txt 2>output2.txt

要使用您自己的代码,您可以编写(我添加了回车键以避免滚动条并使其可读。没有回车键和滚动条的相同命令如下:

bq query --max_rows=1000000 --use_legacy_sql=false --format=json 
   --batch=true --headless=true 
   'select * from `ga4-extract.analytics_123456789.events_'"$RUNDATE"'`;
   ' >data.json 2>bglog.txt

或不输入:

bq query --max_rows=1000000 --use_legacy_sql=false --format=json --batch=true --headless=true 'select * from `ga4-extract.analytics_123456789.events_'"$RUNDATE"'`;' >data.json 2>bglog.txt

请注意,如果没有输出,此命令将创建一个空文件,并且它将在每个命令上覆盖该文件。如果要附加,请使用 >>。例如:

>>data.json 2>>bglog.txt

此外您可能还想添加以下内容:

echo --------------------- >> data.json
echo --------------------- >> bglog.txt

这会将 ---- 写入两个文件,帮助您查看旧执行和新执行的时间。

相关内容