【发布时间】: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,不是直接)...请考虑您的实际目标是什么。