【问题标题】:Running Bash Commands from C#从 C# 运行 Bash 命令
【发布时间】:2015-02-12 20:27:21
【问题描述】:

我试图弄清楚如何从在 IIS 7/.Net 4.5 上运行的 C# 运行 bash 命令。

我一直在网上搜索,很多答案都认为您已经安装/安装了某些东西。

我已经用 Git Bash 和 Git Giu 安装了 Git 1.9.4.msysgit.2。我正在寻找一些关于我需要安装什么来运行即使是最简单的 bash 命令的帮助。以及如何运行它。

我看过像 bash pipes - I am trying to call script from c# 这样的帖子,但它使用的是 cygwin。如果没有它,我可以做同样的事情吗?如果可以,我该怎么做?

目标

如果我在上面提出的问题没有意义或似乎提出了单独的问题,那么我的最终目标就是这里。我正在尝试编写自己的服务器端 git 钩子。当开发人员pushes他们提交到我们的 GitHub 存储库时,我希望 GitHub 调用我们的回调 url。我希望我的回调 url 运行 git pull 命令以使用刚刚推送的内容更新我们的 staging 服务器。

我是根据我在GitHub - setup auto deployment with remote server 上提出的一个问题来回答这个问题的。根据那里的答案,我正在尝试运行一个简单的命令,但是对命令进行硬编码,或者将其放入脚本中并运行它,例如:cd $REPO_DIR && git pull origin $branch_name

我知道 Jenkins 和其他软件,但我想自己执行这些命令而不是安装其他软件。

如果需要更多信息,请随时询问。

更新 1

所以根据下面的一些答案,我想出了以下内容

using System.Diagnostics;

Process process = new Process();

ProcessStartInfo processStartInfo = new ProcessStartInfo();
processStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
processStartInfo.FileName = @"C:\Program Files (x86)\Git\bin\bash.exe";
processStartInfo.WorkingDirectory = @"C:\myrepo\mysite";
processStartInfo.Arguments = "git status";
processStartInfo.RedirectStandardOutput = true;
processStartInfo.RedirectStandardError = true;
processStartInfo.UseShellExecute = false;

process.StartInfo = processStartInfo;
process.Start();

String error = process.StandardError.ReadToEnd();
String output = process.StandardOutput.ReadToEnd();

ViewBag.Error = error;
ViewBag.Ouput = output;

通过上面的代码,我得到了"C:/Program Files (x86)/Git/bin/bash.exe": git: No such file or directory。我知道exe在那里。我做错了什么?

更新 2

根据@SurgeonofDeath 的评论,我关注了这篇帖子http://blog.countableset.ch/2012/06/07/adding-git-to-windows-7-path/,并将Git 的路径添加到我的环境变量中。但是我仍然遇到同样的问题。有什么想法吗?

谢谢。

【问题讨论】:

  • 明确一点,当您说“bash”时,您的意思是命令行程序吗?或者你真的想要一个 unix bash shell 被调用?
  • 我想一个更好的问题是,如果您不能全局安装 ms git,以便可以从普通命令行调用它?在这种情况下,您可以只使用命令行程序的正常调用,而不必处理 ms git 默认安装的 bash shell
  • @lukevp 好问题。让我想到这个问题的是我之前问过的这个问题stackoverflow.com/questions/28485281/…。根据我标记的答案,我想运行 cd $REPO_DIR && git pull origin branchname 的 bash 脚本命令
  • 不幸的是,当我使用 Jenkins 来检测我们的存储库中的更改时,我可能不会有太多帮助。对不起!
  • XY 问题...所以您真正的问题是“如何运行将工作文件夹设置为特定位置的可执行文件”,但由于某些奇怪的原因,您想通过 bash 脚本(不是 CMD,不是直接)...请考虑您的实际目标是什么。

标签: c# git bash shell


【解决方案1】:

无需调用bash.exe,只需调用git 并将状态作为参数传递:

processStartInfo.FileName = "git";
processStartInfo.Arguments = "status";

【讨论】:

    【解决方案2】:

    也许我误解了你的问题,但是execve 呢? 这是它的手册页的摘录。

    名字

       execve - execute program
    

    概要

       #include <unistd.h>
    
       int execve(const char *filename, char *const argv[],
                  char *const envp[]);
    

    描述

       execve() executes the program pointed to by filename.  filename must > be
       either a binary executable, or a script starting with  a  line  of  > the
       form:
    
           #! interpreter [optional-arg]
    

    【讨论】:

    • 我不确定为什么将其发布为答案,我认为这应该是一个评论,因为它是一个问题?
    • 它是答案,因为它符合问题标题。您可以使用 execve 从 c 运行命令或脚本。问题只是因为我担心 git 的东西。请让@RoLYrolls 在这里发表评论,看看我是否完全错了(这就是为什么它被设计为一个问题:)
    • @EmilKakkau 感谢您的回答。这段代码可以从 C# 运行吗?它在我看来类似于 PHP(但我可能是错的)。谢谢!
    • @RoLYroLLs 这实际上看起来很像 C。这是我不确定这是否可以回答这个问题的另一个原因。标签指示为C,我认为可能与bash有关。
    • 如果它与纯 C 一起工作,那么肯定会挂起 C#,但要弄清楚这一点,请使用您选择的搜索引擎。我只是看了一眼,似乎 execve 也可用于 C#。
    【解决方案3】:

    检查您的 PATH 环境变量并更新它

    C:/Program Files (x86)/Git/bin/bash.exe": git: 没有这样的文件或目录

    表示bash找不到的git

    1.检查 bash 中的 PATH 环境变量(与 Windows 环境变量应该保持不同)

    调整一下

    processStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
    

    使终端可见。

    在终端中,您将使用 Process.Start() 进行创建

    类型:

    echo ${PATH}
    

    2。更新你的路径

    • 您可以更新 windows 的全局路径(需要重新启动)
    • 您可以更新 windows 的用户路径(这应该需要注销,但我不确定)。
    • 在启动Process 之前,您只需使用System.Environment.SetEnvironmentVariable 将路径设置为您喜欢的内容即可

    补充说明:

    如果您像我一样拥有多个版本的 bash、命令解释器、git 等,如果您尝试连接所有路径并希望找到理想的顺序,那可能会非常混乱。您可能会看到您心爱的命令的一些奇怪行为,直到您意识到它不是您打算运行的命令...想想 FIND.exe...我什至没有想到 用户友好的 编辑环境变量的windows界面...

    【讨论】:

      猜你喜欢
      • 2014-05-26
      • 1970-01-01
      • 1970-01-01
      • 2012-11-13
      • 1970-01-01
      • 1970-01-01
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多