在bash

时间:2015-05-29 10:00:01

标签: linux git bash

我正在编写一个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 ..

每个应用程序都会调用以上两行。 这就是我到目前为止所做的事情

问题:

  1. 我只获得stdout/stderr仅用于我的最后一个命令,即从原点拉不从结帐。是否有可能在没有在每&&之前写入文件名的情况下获得整个命令的输出?那么

  2. 在app目录中生成error.txt / output.txt文件。我如何在bash_script目录中生成它们,即一个级别。

  3. 执行git pull origin master时

    From http://gitProjectUrl branch master -> FETCH_HEAD

    以上行重定向在error.txt。

    Already up-to-date.

    此行在output.txt中重定向

    为什么这两行都不在output.txt ??

2 个答案:

答案 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 ..