我使用一个命令通过搜索一个公共文件(Jenkinsfile(来收集我的所有项目,因为我想在每个项目目录中执行一个命令:
find . -name 'Jenkinsfile' | sed s/Jenkinsfile// | xargs -L 1 bash -c '(cd $0 && git branch)'
为了缩短它以备将来使用,我尝试为它创建一个别名,如下所示:
alias fgb="find . -name 'Jenkinsfile' | sed s/Jenkinsfile// | xargs -L 1 bash -c 'cd $0 && git branch'"
但现在我只收到这样的错误消息:
./shared/authorization-provider/: line 0: cd: /usr/bin/bash: No such file or directory
怎么了?
编辑:
我找到了一个解决方案:
alias fgb="find . -name 'Jenkinsfile' | sed s/Jenkinsfile// | xargs -I {} bash -c 'cd {} && pwd && git branch' "
正如Kamil所建议的,您应该尝试使用函数,而不是或多或少过时的别名。find
足以满足您的需求:
fgb() {
find . -name 'Jenkinsfile' -execdir 'git branch' ;
}
-execdir
从找到匹配文件的目录中运行其命令参数。
怎么了?
$0
位于"
引号内,因此它被扩展到/usr/bin/bash
。cd $0
->cd /usr/bin/bash
->no such file or dir
。
长达千年的建议是:使用函数,而不是别名。写一个函数而不是别名。
fgb() {
find . -name 'Jenkinsfile' | sed s/Jenkinsfile// | xargs -L 1 bash -c 'cd $0 && git branch'
}