我正在读这篇文章但我并不完全明白答案。
我想知道我是否可以修改它,它叫什么,命令重定向?
我想要的是:
- 不要挂起,使用 & 符号
&
继续执行下一个命令 - 将命令生成的数据输出到文件
data.json
- 运行命令时遇到的任何问题、错误消息或问题都会将其输出到 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
这会将 ---- 写入两个文件,帮助您查看旧执行和新执行的时间。