【问题标题】:How can I get my git (msysgit on windows) post-commit script to invoke my python script as python rather than bash?如何让我的 git(Windows 上的 msysgit)提交后脚本以 python 而不是 bash 调用我的 python 脚本?
【发布时间】:2009-10-10 14:49:29
【问题描述】:

我在 python 中编写了一个提交后脚本,“c:\myfolder\myscript.py”。我想从提交后脚本中调用它。这没有找到它:

#!/bin/sh
c:\myfolder\myscript.py

bash 认为命令 c:myfoldermyscript.py - 斜线被删除。

所以,我尝试了正斜杠:

#!/bin/sh
c:/myfolder/myscript.py

但似乎 bash 认为我的 .py 文件本身就是一个 bash 脚本,所以我得到了 bash 错误,因为它错误地试图解释它。

【问题讨论】:

    标签: git bash msysgit


    【解决方案1】:

    脚本的第一行称为Shebang,唯一的问题是:

    Shebangs 指定系统可执行文件的绝对路径;这可能会导致具有非标准文件系统布局的系统出现问题。
    即使系统具有相当标准的路径,同一操作系统的变体也很可能具有所需解释器的不同位置。

    唯一的另一种方法是直接在脚本中调用 python

     #!/bin/sh
     C:/apps/Python25/python c:/myfolder/myscript.py
    

    无论哪种方式,正斜杠都是按顺序排列的:这是一个 bash 会话,用于执行 Git 及其钩子。
    直接调用 python 解释器的好处是用环境变量替换它:

     #!/bin/sh
     $PYTHON_HOME/python $SCRIPT_FOLDER/myscript.py
    

    【讨论】:

    • 你写的有道理。因此,文件扩展名“py”的 Windows 机制与可执行文件“python.exe”相关联,因此“执行”py 文件调用 python.exe,该机制无法从 Windows 挂钩- 无知的 bash 会话,对吧?
    • 对,windows 文件关联在 bash 会话中不起作用。但如果 PATH 环境变量中有“C:/apps/Python25”,则单独使用“python”(或“python.exe”)实际上可以工作。
    • @VonC - 查看您的用户资料,我想知道您是否介意看看我的这个问题并加上您的 2 美分,如果您的想法与已有的不同:stackoverflow.com/questions/1484153/…
    • @Corey:我会的,今天晚些时候(或明天早些时候)。
    • @Corey: ... 完成了。不过,这不是一个完整的答案。只是一些食物供您思考。
    【解决方案2】:

    添加以下内容,即我的 python 解释器的路径,因为我的 python 脚本的第一行有效:

    #!C:/apps/Python25/python

    有更好的方法吗?

    【讨论】:

    • 之所以有效,是因为 Shebang 指定了脚本文件解释器的位置,在本例中为 Python,而不是 Bashlink
    猜你喜欢
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 2012-01-18
    • 2011-04-01
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多