我正在编写一个bash脚本来从origin.Git中拉出master分支在每个app模块中初始化。
我的目录结构:
.-----bash_script
|----app1(git init)
|...various modules
|...error.txt
|...output.txt
|----app2(git init)
|...various modules
|...error.txt
|...output.txt
在bash_script中:$ directory包含(app1或app2 ......在循环中调用)
cd "${directory}" && git checkout master && git pull origin master >> output.txt 2>>error.txt
cd ..
每个应用程序都会调用以上两行。 这就是我到目前为止所做的事情
问题:
我只获得stdout/stderr
仅用于我的最后一个命令,即从原点拉而不从结帐。是否有可能在没有在每&&
之前写入文件名的情况下获得整个命令的输出?那么
在app目录中生成error.txt / output.txt文件。我如何在bash_script目录中生成它们,即一个级别。
执行git pull origin master时
From http://gitProjectUrl
branch master -> FETCH_HEAD
以上行重定向在error.txt。
Already up-to-date.
此行在output.txt中重定向
为什么这两行都不在output.txt ??
答案 0 :(得分:2)
使用子shell (...)
收集单个流中的所有输出:
( cd ... && ... && git pull origin master ) >> output.txt 2>>error.txt
这解决了这两个问题,因为在cd
命令之前准备了流。
答案 1 :(得分:1)
使用{...}
:
{ cd "${directory}" && git checkout master && git pull origin master; } >>output.txt 2>>error.txt
cd ..