我可以测试当前目录是否像这样:
[[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == true ]] && echo yes
..但是我如何对不是当前工作目录的目录执行相同的操作?
答案1
只需使用-C
全局选项git
。这样做,并简化您的代码(为什么要解析输出以重建直接编码在返回状态中的信息?):
directory=. # or wherever
if git -C "$directory" rev-parse --is-inside-work-tree >/dev/null 2>/dev/null; then
echo yes
fi
答案2
我怀疑最简单的选择是暂时更改到目录:
(cd /path/to/target && [[ $(git rev-parse --is-inside-work-tree) == true ]]) 2> /dev/null && echo yes
答案3
我将使用一个移动到目标目录的函数来完成此操作,在那里运行命令并返回结果:
isGitDIr(){
for dir in "$@"; do
(
cd "$dir" || return
[[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == true ]] &&
echo "yes"
)
done
}
括号使命令在子 shell 中运行,这样当函数完成时,您就不会更改父 shell 的目录。将这些行添加到 shell 的初始化文件(例如~/.bashrc
)或直接粘贴到终端中,您可以执行以下操作:
isGitDIr /path