从 C# 运行 Bash 命令

2024-03-13

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

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

我已经有了Git 1.9.4.msysgit.2与 Git Bash 和 Git Giu 一起安装。我正在寻求一些帮助,了解我还需要安装什么才能运行最简单的 bash 命令。以及如何运行它。

我看过类似的帖子bash 管道 - 我正在尝试从 C# 调用脚本 https://stackoverflow.com/questions/15586424/bash-pipes-i-am-trying-to-call-script-from-c-sharp但这使用cygwin。如果没有它,我可以做同样的事情吗?如果可以,我该怎么做?

Goal

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

我根据我之前提出的问题提出了这个问题GitHub - 使用远程服务器设置自动部署 https://stackoverflow.com/questions/28485281/github-setup-auto-deployment-with-remote-server/28485470?noredirect=1#comment45293201_28485470。根据那里的答案,我正在尝试运行一个简单的命令,但可以对命令进行硬编码,或者将其放入脚本中并运行它,例如:cd $REPO_DIR && git pull origin $branch_name.

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

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

Update 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就在那里。我做错了什么?

Update 2

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

Thanks.


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

processStartInfo.FileName = "git";
processStartInfo.Arguments = "status";
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 C# 运行 Bash 命令 的相关文章

随机推荐

  • 静态和非静态方法的同步块

    我创建了两个线程 并使用称为该对象的静态和非静态方法的单个类实例 理想情况下 静态方法需要使用类名来调用 我也这样做了 我同步了线程正在调用其方法的类的私有静态成员上的静态和非静态方法 我注意到输出是同步的 我的问题是 静态方法如果使用同步
  • 将 jsTree 节点设置为“未确定”状态

    我在用着jsTree http www jstree com 显示带有复选框的树 每个级别的节点都使用以下命令按需加载json data plugin 如果检查节点的后代 则该节点应处于 未确定状态 如 ACME 和 USA 问题是 树一开
  • 程序类型已存在:io.invertase.firebase.BuildConfig

    根据一些谷歌搜索 两个包之间似乎存在一些重叠 我过去遇到过类似的问题 我认为我能够使用 gradlew clean 修复它 但这并不能解决我当前的问题 这是错误 任务 app transformDexArchiveWithDexMerger
  • 箱子堆放问题

    我在很多地方都发现了这个著名的 dp 问题 但我不知道如何解决 给你一组 n 种类型 矩形 3 D 盒子 其中第 i 盒子的高度为 h i 宽度为 w i 深度 d i 均为实数 你 想要创建一堆盒子 尽可能高 但你可以 只将一个盒子堆叠在
  • 如何处理使用相同数据库的两个独立 Laravel 项目的迁移?

    我们的设置是这样的 我们有 API 可以为 iOS 和 Android 应用程序提供支持 我们有一个管理 API 可以为管理 Web 应用程序提供支持 我正在开发管理员 我的同事正在开发应用程序 API 它们都使用相同的数据库和大部分相同的
  • Ternary 和 If/Else 编译成相同的东西,为什么?

    编译器将简单的三元语句编译为与编译简单的 if else 语句相同的东西吗 另外 为什么编译器会被设计为以不同的方式编译它们 例如 这样 int a 169 int b 420 int c c a gt b 42 69 编译为与此相同的内容
  • 是否可以支持旧 API 级别的 setScrollY() (ScrollView API 14) 之类的函数?

    我正在编写一个简单的第一个 Android 应用程序 我的主要活动之一是相当长的 ScrollView 其中我有一些调用其他 ListView 的按钮 当 ListView 完成并且 ScrollView 回来时 我希望屏幕上的位置与第一次
  • 我们可以将两个连接到不同数据库的 Django/python 应用程序合并到一个集成应用程序中吗

    我有两个独立的 Django 应用程序连接到不同的数据库 我想制作一个父应用程序 将请求路由到两个子应用程序之一 这可能吗 我怎样才能实现这一目标 父应用程序不必连接到任何数据库 它应该只是将请求路由到子应用程序 谢谢您的帮助 这个有可能
  • 为什么我在后台运行脚本时会得到“暂停(tty 输入)”的信息

    我写了一个tcsh脚本来清除集群中的垃圾数据 代码是 set hosts 1 set clear path 2 foreach i hosts rsh i rm rvf clear path end 当我在后台运行此脚本时 如下所示 dis
  • 如何查找两个 JavaScript 对象数组之间的差异?

    我有两个 JavaScript 数组orig 原始对象数组 和update 更新后的对象原始数组 具有相同的长度并包含对象 我想输出每对对象之间的差异 Example var orig enabled true name Obj1 id 3
  • 如何将 unicode 字符发送到活动应用程序?

    我需要 Windows API 中的 SendInput 之类的东西 我看到这个方法 我不知道有什么办法可以将unicode字符转换为虚拟键码 CGEventRef CGEventCreateKeyboardEvent CGEventSou
  • Neo4j 2 和 Java 8

    Java 8 将于本周发布 当将 Neo4j 1 9 与 Java 7 一起使用时 我们看到弹出警告 提示仅支持 6 但我们对 1 9 7 组合从未遇到任何问题 我知道 Neo4j 2 不能使用低于 Java 7 的任何东西 但是 Neo4
  • 禁用键盘 :: TextInput React Native

    下面给出的代码在第一次和第二次点击时有效 在相同的文本输入上它不起作用 键盘再次打开 因为文本输入已经聚焦 并且我正在使用自定义数字按钮进行输入 TextInput onFocus Keyboard dismiss 有什么建议么 原生反应的
  • HTML5 中是否可以实现类似 Photoshop 的混合模式?

    我想放一个红色矩形 div 元素在我的网页上 这样它不仅看起来是透明的 而且就像在 Photoshop 的乘法模式中混合的一样 The div 将有position fixed 所以下面的内容会很快改变 任何 HTML5 CSS3 canv
  • 自动打开第一张 Fancybox 图片

    单击链接后 我将从 JSON get 中引入一些图像 然后单击其中一张图片时可以显示图库 但我希望第一张图像立即出现 作为一旦JSON 已加载 这可能吗 我的代码是 json get css cursor pointer click fun
  • 在 tr 上使用 :hover 时出现 CSS 边框问题

    我试图在数据表中突出显示鼠标所在的行 我正在尝试用 border top 和 border bottom 来做到这一点 为了提高可读性 我还在交替行上放置了一个浅色透明的 png 似乎当我打开和关闭边框 适用于 IE8 和 FF 时 行会稍
  • 如何将 PHYLIP 格式转换为 FASTA

    我刚刚开始使用 perl 我有一个问题 我有 PHYLIP 文件 我需要将其转换为 FASTA 我开始写剧本 首先 我删除了行中的空格 现在我需要对齐所有行 每行应包含 60 个氨基酸 并且序列标识符应打印在新行中 也许有人可以给我一些建议
  • 时间耦合与工作单元

    所以 正如一直以来向我指出 https stackoverflow com questions 16148924 value types inferred as object at runtime when using dynamic 16
  • Node.js console.log 是否有长度限制?

    Node js 中 console log 输出的长度有限制吗 下面的代码打印 56462 之前的数字 然后停止 出现此问题是因为我们从 MySQL 返回数据集 并且输出将在 327k 个字符后退出 var out for i 0 i lt
  • 从 C# 运行 Bash 命令

    我试图弄清楚如何从在 IIS 7 Net 4 5 上运行的 C 运行 bash 命令 我一直在网上搜索 很多答案都假设您已经安装 就位了某些东西 我已经有了Git 1 9 4 msysgit 2与 Git Bash 和 Git Giu 一起