【期望】在 gerrit 的 change-merged hook 中,执行 shell 命令,并将输出结果重定向到文件中。
单独执行脚本是可以的,可是放在 hook 中却一直没法儿将结果重定向到文件中,也没有什么错误提示,就是不写。
【各种尝试】
1,bash 与 dash
鉴于之前被 gerrit hook 执行时 bash 和 dash 的区别坑过,这回第一个就检查这里;
2,然后是各种重定向:
>、文件描述符、exec、
3,然后改成复杂的 python(宝宝心里苦啊):
import subprocess
output_file = 'result.json'
query_cmd = 'ssh xxx > ' + output_file
try:
subprocess.check_output(query_cmd, stderr=subprocess.STDOUT,
shell = True)
except subprocess.TimeoutExpired:
print("Communication timeout expired.")
else:
xxx
4,权限?
5,最后放弃治疗,不重定向了,输出给字符串,然后解析字符串。,没有重定向到文件,当然好了。
【分析】
耗费了半天的时间,可是不甘心啊。回头又仔仔细细过了一遍代码,为啥单独可以执行,放在 hook 里自动就没法儿执行了?
最后我想,是不是 hook 路径不支持写入文件?但是它 gerrit 能管这么多?换个路径试试?后来一想,我换成绝对路径试试?
然后,就好了。
辛苦我大半天,感觉到被 gerrit 深深的调戏了一番。
gerrit hook 竟然不支持相对路径!也是让人醉了。这个应该算是 bug 了吧。。。
虽然被调戏的很不开心,但是温习了一遍 bash、dash、subporcess、重定向各种知识,就算是补课了吧