Linux 在bash中的命令之间使用符号(&;)时重定向stdout和stderr
我正在编写一个bash脚本来从源代码中提取主分支。Git在每个应用程序模块中都被初始化 我的目录结构:Linux 在bash中的命令之间使用符号(&;)时重定向stdout和stderr,linux,git,bash,Linux,Git,Bash,我正在编写一个bash脚本来从源代码中提取主分支。Git在每个应用程序模块中都被初始化 我的目录结构: .-----bash_script |----app1(git init) |...various modules |...error.txt |...output.txt |----app2(git init) |...various modules
.-----bash_script
|----app1(git init)
|...various modules
|...error.txt
|...output.txt
|----app2(git init)
|...various modules
|...error.txt
|...output.txt
在bash_脚本中:$目录包含(app1或app2…在循环中调用)
以上两行是为每个应用程序调用的。
这就是我到目前为止所做的
问题:
stdout/stderr
,即从原点拉入和不从签出。是否可以在不在每个&&
之前写入文件名的情况下获得整个命令的输出??那怎么办来自http://gitProjectUrl
分支主控->取头
上述行在error.txt中重定向
已经是最新的。
这一行在output.txt中被重定向
为什么两行都不在output.txt中(…)
收集单个流中的所有输出:
( cd ... && ... && git pull origin master ) >> output.txt 2>>error.txt
这解决了这两个问题,因为流是在
cd
命令之前准备好的。只需使用{…}
将它们组合在一起:
{ cd "${directory}" && git checkout master && git pull origin master; } >>output.txt 2>>error.txt
cd ..
我想在可能的情况下,最好使用
{}
而不是()
,但是子shell的一个很好的副作用是以后不需要更改目录。是的,但通常cd-
会处理它,而派生子shell的副作用比这多得多。
{ cd "${directory}" && git checkout master && git pull origin master; } >>output.txt 2>>error.txt
cd ..