c# - 在 C# Process.Start 参数中使用单引号
问题描述
我需要使用包含单引号的参数从 .Net Core 执行 Linux 命令行程序'
两个例子:
dpkg-query -W -f=' ${db:Status-Status} ' mariadb*
virsh qemu-agent-command SRV01 '{"execute":"guest-ping"}'
在 C# 中:
Process proc = new System.Diagnostics.Process();
ProcessStartInfo pi = new ProcessStartInfo("dpkg-query");
pi.Arguments = "-W -f=' ${db:Status-Status} ' mariadb*";
proc.StartInfo = pi;
proc.Start();
错误消息的一个示例:'''''''''''''''''''dpkg-query: no packages found matching ${db:Status-Status} dpkg-query: no packages found matching '
我正在调用大约 30 个带有参数的不同程序,没有任何问题。只有单引号有问题
还尝试使用ProcessStartInfo.ArgumentList
和许多基本的逃生技巧,但没有成功。
解决方案
解决方案:
using System;
using System.Diagnostics;
namespace Exe
{
class Program
{
static void Main(string[] args)
{
Process proc = new System.Diagnostics.Process();
//In the Linux shell: dpkg-query -W -f=' ${db:Status-Status} ' mariadb*:
ProcessStartInfo pi = new ProcessStartInfo("dpkg-query");
pi.ArgumentList.Add("-W");
pi.ArgumentList.Add("-f= ${db:Status-Status} ");
pi.ArgumentList.Add("mariadb*");
pi.UseShellExecute = false;
proc.StartInfo = pi;
proc.Start();
do { System.Threading.Thread.Sleep(50); } while (proc.HasExited == false);
Environment.Exit(0);
}
}
}
还有另一个命令示例:
....
//In the Linux shell: virsh qemu-agent-command SRV04 '{"execute":"guest-ping"}'
ProcessStartInfo pi = new ProcessStartInfo("virsh");
pi.ArgumentList.Add("qemu-agent-command");
pi.ArgumentList.Add("SRV03");
pi.ArgumentList.Add("{\"execute\":\"guest-ping\"}");
....
在TSlivede和jnm2的帮助下解决了这个github.com的问题:-)
推荐阅读
- spring-boot - 在 spring boot oauth2 授权服务器中添加额外的登录字段
- sql - 基于来自不同列的值的比较组合相邻行
- json - 格式化 json 查询输出,以便使用 ansible 给出路径列表
- java - 下一个元素可见性需要 Selenium 框架通用功能
- go - 去空接口类型断言并创建一个副本
- javascript - 无法使用 WebdriverIO (Selenium) 切换窗口
- sql - SQL:如何在 SQL 数据库中创建触发器以更新上次修改日期列
- node.js - nodejs express 几天后停止工作
- angular - Observable 导致代码被调用 3 次
- ruby-on-rails - rails 仅加入所有成员均为 18 岁以上的组