【发布时间】:2019-02-25 16:34:34
【问题描述】:
如何在 Ubuntu 上设置 PATH,使我设置的变量也在接收后脚本中设置?目前我正在通过~/.bashrc 文件这样做:
export PATH="$PATH:/opt/mssql-tools/bin"
但是如果我从钩子中打印它,PATH 看不到任何变化。因此,如果我尝试在钩子中执行有问题的命令,我会得到
remote: FileNotFoundError: [Errno 2] No such file or directory: 'sqlcmd': 'sqlcmd'
所以我现在看到的唯一解决方案是在 post-receive 钩子本身中再次定义它,如下所示:
export PATH="$PATH:/opt/mssql-tools/bin"
有没有更好的办法?
谢谢!
【问题讨论】:
-
如果您正在寻找更好的方法,请编辑您的帖子以包含显示您当前执行方式的特定代码。
-
这感觉有点像X-Y problem。我猜您怀疑 PATH 是错误的,因为找不到某些可执行文件或其他文件,对吗?那么那个可执行文件是什么?钩子脚本中的 PATH 只需定义一个 PATH ,其中包括钩子脚本将使用的所有可执行文件。如果您可以枚举它需要的所有可执行文件,那么您将在构建包含这些文件的
PATH=命令方面取得很大进展。钩子脚本中有哪些可执行文件失败了? -
我怀疑根本问题是
$PATH的初始值在您登录并运行 .bashrc 时与钩子脚本运行时不同。要么清点你的钩子使用的可执行文件列表,并指定一个允许它找到这些可执行文件的路径;或者你可以减少/消除你对钩子脚本中PATH的依赖,并为你需要的可执行文件指定绝对PATHs。 -
至于“为什么”部分,这就是 bash 的工作方式。手册页记录了 interactive shell(当连接了终端时),bash 在启动时读取 .bashrc。对于非交互式 shell(如脚本),它不会读取 .bashrc。此外,交互式 bash shell 读取的 .bashrc 属于运行 shell 的用户,因此即使钩子具有 was 交互式,它也可能在 www 或git 用户帐户,而不是您自己的帐户。
-
快速阅读 bash 手册页表明它将查找环境变量
BASH_ENV并将其视为(完整的、绝对的)文件名来读取和执行。
标签: bash path git-post-receive