我有一个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" \;
这里发生了什么?是否可能是红鲱鱼,问题只发生在更改脚本后?
答案 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