【问题标题】:make shell commands available in git hook使 shell 命令在 git hook 中可用
【发布时间】:2021-12-04 14:43:54
【问题描述】:

目标是让用户在克隆/签出 repo 后可以使用一些命令。

git 钩子文件

#!/bin/sh
echo $PWD/dev-commands.sh
source $PWD/dev-commands.sh

我想在 git 钩子名称 dev-commands.sh 之后提供的命令

#!/bin/sh
function greet() {
  echo Hello
}

这似乎没有使命令可用。如果我在目录中手动运行 source dev-commands.sh 它确实使greet 命令可用..

有什么建议吗?

【问题讨论】:

    标签: git sh githooks


    【解决方案1】:

    来源函数在来源它们的 shell 中可用,而不是在其父 shell 中。这就是为什么当您编写一个 shell 脚本时,它可以使用自己的函数,而不必担心会干扰其调用者的命令的含义。

    ( doit() { echo hi; }; doit ); doit
    

    例如,会说hi,然后很可能会抱怨-bash: doit: command not found 或类似的消息,因为括号将doit 放入一个子shell 中,它有自己的环境,就像git 钩子一样。

    在没有他们积极合作的情况下即时更改某人的 shell 命名空间可以而且将会被准确地描述为恶意软件。

    包括他们可以根据需要获取的设置命令。

    【讨论】:

    • 好的,我明白你的意思了。所以你不能真的强迫他们在一个钩子上运行脚本 - 相反,使用钩子告诉他们运行某些shell命令,使一切可用。最终我希望他们有一堆简单的命令可用于不同的配置等等,所以这是有道理的
    • 我通常是为安装程序提供 makefile 目标。 make setup 很容易记住,它可以做任何你想做的事情。你甚至可以建议他们说make -n setup 看看它会做什么。
    • 请注意,bash 特别具有“功能”,您可以通过环境变量将函数导出到不相关的子 shell。 (Bash 将函数编码为文本,然后子 shell 扫描文本并重新创建函数。)这有一些令人讨厌的安全隐患,所以人们可能希望默认禁用它...
    猜你喜欢
    • 1970-01-01
    • 2016-12-10
    • 2013-01-05
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 2020-05-16
    相关资源
    最近更新 更多