我在 post-receive 上执行单元测试,但不希望用户等待。
我尝试了来自 git-user 邮件列表的建议("just & it"),但这不起作用:https://groups.google.com/forum/#!topic/git-users/CFshrDgYYzE
即使我只是把这个放在 hooks / post-receive 中,git 似乎也会等待 bash 脚本退出:
exec-unit-tests.sh &
我在 post-receive 上执行单元测试,但不希望用户等待。
我尝试了来自 git-user 邮件列表的建议("just & it"),但这不起作用:https://groups.google.com/forum/#!topic/git-users/CFshrDgYYzE
即使我只是把这个放在 hooks / post-receive 中,git 似乎也会等待 bash 脚本退出:
exec-unit-tests.sh &
这对我有用。必须关闭&
和stdout& stderr管道:
long-running-command >&- 2>&- &
为了把命令放到后台,必须同时关闭 stdout
和 stderr
。如果它们中的任何一个保持打开状态,则进程不会在后台运行,提交操作将等到钩子脚本完成后才完成。
一种懒惰的替代方法是将 stdout
和 stderr
简单地重定向到 /dev/null
:
long-running-command >/dev/null 2>&1 &
这种方法不太干净,但或许更容易理解和记忆,并且具有相同的效果。
stdout
和stderr
(就像您的答案已经做到了)。如果它们中的任何一个保持打开状态,则进程将无法在后台运行。个人而言,我使用>/dev/null 2>/dev/null &
来获得相同的效果,因为这样更容易知道它的作用,而不必查阅man bash
。 - janoslong-running-command >&- 2>&- &
确实防止了 Git 等待脚本(耶!),但它也阻止了脚本创建预期的输出。也许是因为在脚本中调用的程序正在使用 stdout 进行输出?"post-commit" 内容(在 Win10 上):
#!/bin/sh
path\myScript.bat >&- 2>&- &
"myScript.bat" 内容:
title Run other app automatically
start path\someoneElsesApp.exe -arg1 -arg2 "inputFile1.xml" "inputFile2.xml" "outputFile.txt"
- Elias Mossholm