Dou*_*Fir 2 shell redirection command-line tail
我正在阅读这篇文章,但我并不完全理解答案。
我想知道我是否可以修改它,它叫什么,命令重定向?
我想要什么:
&继续执行下一个命令data.json这可能吗?
例如我目前有这个命令:
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
Run Code Online (Sandbox Code Playgroud)
大约 30 分钟后失败,我看不到输出或问题是什么。这是在 github actions runner 上,工作流的控制台输出仅给出失败状态,但对于此工作流来说,没有控制台输出指示错误。
我想修改我的命令,以便可以像我已经拥有的那样输出到 data.json,但也可以继续下一步监视 bqlog.txt 文件tail -F bqlog.txt
是的,这是可能的。
其2>&1含义如下:
2 : stderr
> : output redirect
& : copy file descriptor
1 : file descriptor 1
Run Code Online (Sandbox Code Playgroud)
因此:stderr 输出重定向到文件描述符 1 (stdout) 所指向的任何位置。默认值:屏幕。
这意味着,stderr 被输出到屏幕上。
您的问题是,如何将命令的输出重定向到文件 1,并将 stderr 重定向到另一个文件?
你的命令变成:
command >output1.txt 2>output2.txt
Run Code Online (Sandbox Code Playgroud)
要使用您自己的代码,您可以编写(我添加了 Enter 以避免滚动条并使其可读。没有 Enter 和滚动条的相同命令如下:
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
Run Code Online (Sandbox Code Playgroud)
或不输入:
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
Run Code Online (Sandbox Code Playgroud)
请注意,如果没有输出,此命令将创建一个空文件,并且它将在每个命令上覆盖该文件。如果要追加,请使用 >> 代替。例如:
>>data.json 2>>bglog.txt
Run Code Online (Sandbox Code Playgroud)
此外,您可能还需要添加以下内容:
echo --------------------- >> data.json
echo --------------------- >> bglog.txt
Run Code Online (Sandbox Code Playgroud)
这会将 ---- 写入两个文件,帮助您查看旧执行和新执行何时发生。