添加其他参数时为什么我的BASH脚本失败?

时间:2017-08-17 08:30:29

标签: git bash

我有一个BASH脚本可以递归地浏览我的Git项目并将它们拉出来。我们使用两个分支,主要和开发。当我将脚本更改为包含&& git checkout development时,我的脚本无法运行,我收到此错误:

find: missing argument to `-exec'

当我再次删除&& git checkout development部分时,即使脚本恢复到初始状态,错误也会保持不变。

这是脚本:

#!/bin/bash
find . -type d -name .git -exec sh -c "cd \"{}\"/../ && pwd && git pull && git status" \;

这就是Git结账通话(并删除git status):

#!/bin/bash
find . -type d -name .git -exec sh -c "cd \"{}\"/../ && pwd && git checkout development && git pull" \;

这里发生了什么?是否可能是红鲱鱼,问题只发生在更改脚本后?

1 个答案:

答案 0 :(得分:3)

请勿在{{1​​}}之后的命令字符串中使用占位符{}。 您可以使用此sh -c

find

这里我们传递虚拟find . -type d -name .git -exec sh -c \ 'cd "$1"/../ && pwd && git checkout develop && git pull' _ '{}' \; 以在命令行中填充_,并传递$0以填充{}位置参数。

根据评论进行修改: 在修改了脚本的参数后,我发现最简单的方法是首先将它们导出到子shell:

$1