【发布时间】:2019-07-22 22:31:35
【问题描述】:
我需要使用包含单引号 ' 的参数从 .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 和许多基本的逃生技巧,但没有成功。
【问题讨论】:
-
我想是的...根据 dpkg-query 手册第 122 行:
syntax “${field[;width]}” -
调试值为
-W -f=' ${db:Status-Status} ' mariadb*我可以在控制台看到程序的错误信息。它们在Linux shell中执行良好 -
@RobertBaron:它是从在 Linux 上运行的 .Net Core 控制台程序调用的(安装了 .Net Core 运行时)。
-
@mjwills:该程序以 root 身份运行,我所在的工作文件夹无关紧要。附加信息:所有其他不带单引号的命令都可以正常工作
-
错误示例:
'''''''''''''''''''dpkg-query: no packages found matching ${db:Status-Status} dpkg-query: no packages found matching '。但这当然取决于程序和论据。底线是当引号被解析时会发生一些事情。我认为这是一些 C++ 解析问题正如我所说尝试了许多不同的转义解决方案。
标签: c# linux .net-core process parameter-passing