gpt4 book ai didi

.net - Linux 下的 .net 应用程序问题,在 shell 脚本中不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:31:07 24 4
gpt4 key购买 nike

我正在开发一个 .net 提交后 Hook ,以通过他们的 Soap SDK 将数据馈送到 OnTime。我的钩子(Hook)在 Windows 上工作正常,但在我们的生产 RHEL4 颠覆服务器上,当从 shell 脚本调用时它不会工作。

#!/bin/sh/usr/bin/mono $1/hooks/post-commit.exe "$@"

当我从命令行使用参数执行它时,它工作正常。当通过 shell 脚本执行时,出现以下错误:(看起来我用来获取修订日志数据的 SVN 进程执行有问题):

Unhandled Exception: System.InvalidOperationException: The process must exit before getting the requested information.  at System.Diagnostics.Process.get_ExitCode () [0x0003f] in /tmp/monobuild/build/BUILD/mono-1.9.1/mcs/class/System/System.Diagnostics/Process.cs:149  at (wrapper remoting-invoke-with-check) System.Diagnostics.Process:get_ExitCode ()  at SVNLib.SVN.Execute (System.String sCMD, System.String sParams, System.String sComment, System.String sUserPwd, SVNLib.SVNCallback callback) [0x00000]  at SVNLib.SVN.Log (System.String sUrl, Int32 nRevLow, Int32 nRevHigh, SVNLib.SVNCallback callback) [0x00000]  at SVNLib.SVN.LogAsString (System.String sUrl, Int32 nRevLow, Int32 nRevHigh) [0x00000]  at SVNCommit2OnTime.Program.Main (System.String[] args) [0x00000]

我已经尝试使用 mkbundlemkbundle2 制作一个可以命名为 post-commit 的独立程序,但我得到了一个不同的错误信息:

Unhandled Exception: System.ArgumentNullException: Argument cannot be null.Parameter name: Value cannot be null.  at System.Guid.CheckNull (System.Object o) [0x00000]  at System.Guid..ctor (System.String g) [0x00000]  at SVNCommit2OnTime.Program.Main (System.String[] args) [0x00000]

任何想法为什么它可能会从 shell 脚本失败或捆绑版本可能有什么问题?

编辑: @Herms ,我已经用回声试过了,看起来不错。至于 $1/hooks/post-commit.exe,我已经尝试使用和不使用 .net 程序集的完整路径的脚本,结果相同。

编辑: @Leon,我已经尝试了 $1 $2"$@",结果相同。它是一个 subversion post commit Hook ,它有两个参数,因此需要将它们传递给 .net 程序集。 "$@" 是在 mono 站点推荐的,用于从 shell 脚本调用 .net 程序集。 shell 脚本正在 执行 .net 程序集并使用正确的参数,但它抛出的异常在直接从命令行运行时不会抛出。

编辑: @Vinko,除了 BASH_LINENOBASH_SOURCE

之外,我没有发现环境有任何差异

编辑: @Luke ,我厌倦了,但这也没有什么区别。我第一次注意到这个问题是在我的机器上从 TortoiseSVN 进行测试时(当它作为 subversion 守护进程的子进程运行时),但我也发现从 hooks 目录(即 ./post-commit REPOS REV,其中 post-commit 是上面的 sh 脚本。执行 mono post-commit.exe REPOS REV 工作正常。主要问题是为了执行,我需要有一些名为 post-commit 的东西,这样它就会被调用。但是它不能在 shell 脚本中工作,如上所述,mkbundle 没有解决其他问题。

最佳答案

对于某些进程来说,在关闭其 stdout 后会停留一段时间是正常的(即,您会从它们那里读取到文件结尾)。您需要在读取所有数据之后但在检查 ExitCode 之前调用 proc.WaitForExit()

关于.net - Linux 下的 .net 应用程序问题,在 shell 脚本中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54503/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com