gpt4 book ai didi

git - sh 脚本 : using conditionals, git 更新后脚本

转载 作者:太空狗 更新时间:2023-10-29 14:48:29 25 4
gpt4 key购买 nike

我正在为 git 存储库编写更新后脚本,但遇到了一些麻烦。

无论出于何种原因,if 语句都会引发错误:

hooks/post-update: line 5: [master: command not found

我只是想检查推送的分支是否等于“master”。我猜我的语法有问题,这是我的第一个 sh 脚本,但我尝试了几种变体,但没有成功。

感谢您的帮助,

#!/bin/sh

BRANCH=$(git rev-parse --symbolic --abbrev-ref $1)

if ["$BRANCH" = "master"]
then
cd $HOME/domain.com || exit
else
cd $HOME/dev.domain.com || exit
fi

unset GIT_DIR
git pull hub $BRANCH
git checkout $BRANCH
exec git-update-server-info

最佳答案

方括号必须是单独的标记!你看,它试图看起来像漂亮的语法,但事实是,有一个(内置在大多数 shell 中)命令 [。所以语法应该是:

if [ "$BRANCH" = "master" ]
^ ^
+--------------------+-- There have to be spaces here!

如果没有第一个空格,命令将变为 [master,这样的命令不存在——命令是 [。如果没有第二个空格,正确的参数将是 master] 并且不会匹配(而且 [ 将因“缺少 ] 参数”而失败错误。


详细说明:

shell if 语法尽量简单。真的是

if command than command [else command] fi

其中每个命令 都必须以分号或行尾结束。所以你可以这样写

if grep -q foo somewhere
then
whatever
fi

现在在很多情况下你需要做一些事情,比如比较字符串,比较数字,测试文件是否存在,测试一个文件是否比另一个文件新等。为此有一个标准命令 test (它内置于大多数 shell 中,但外部版本始终存在)。它允许像

这样的事情
test "$foo" == "bar"
test -n "$this_variable_must_be_nonempty"
test -f "$this_file_should_exist"

这就是您在 if 中使用的内容。为了更好的语法,这个命令有别名 [ 接受完全相同的参数,除了它需要 ] 作为最后一个参数所以条件看起来很漂亮。这也是大多数 shell 中内置的,但通常也作为 test 的符号链接(symbolic link)存在。所以不要被看起来像特殊语法的东西所迷惑;这是简单的程序调用。

关于git - sh 脚本 : using conditionals, git 更新后脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12037513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com