从 C# 程序传递 Shell 命令,引号消失

Passing Shell Commands from a C# Program, Quotation Marks Disappearing

我试图在 Raspbian 上对我的 Pi 运行 执行 shell 命令,但引号似乎消失了。

string quote = "\"";
string argument = "-vf" + " -hf" + " -o" + @" /home/pi/Desktop/camera/" + "$(date +" + quote + "%d%m%Y_%H%M-%S" + quote + ").jpg";
Process.Start("/usr/bin/raspistill", argument);

这是我要执行的脚本:

sudo raspistill -vf -hf -o /home/pi/Desktop/camera/$(date +"%d%m%Y_%H%M-%S").jpg

这是我遇到的错误:

Invalid command line option (+%d%m%Y_%H%M-%S).jpg)

如您所见,引号似乎已经消失了。

有什么想法吗?

尝试更换 "$(日期 +" + 引用 + "%d%m%Y_%H%M-%S" + 引用 + ")

与:@"$(date+""%d%m%Y_%H%M-%S"")"

转义双引号字符:"

你实际上必须像这样使用双引号:“”

Here 是我用来测试这个的 DotNetFiddle

不可能像这样直接执行 - $( ) 是一个 shell 表达式,您不调用 shell 而只是调用 raspistill 命令。我似乎没有看到 "quoting" 个问题(见评论)

一种方式: 在 C# 中格式化日期字符串(我不是专家,但应该可以)并直接传递格式化的字符串

 ... +" -o" + " /home/pi/Desktop/camera/" + formateddate + ".jpg";

其他方式: 尝试调用 /bin/sh 并传递

"-c " + quote + "/usr/bin/raspistill " + argument + quote

作为参数:

string quote = "\"";
string argument = "-vf" + " -hf" + " -o" + 
" /home/pi/Desktop/camera/$(date +%d%m%Y_%H%M-%S).jpg";
Process.Start("/bin/sh", "-c " + quote + 
"/usr/bin/raspistill " +argument + quote);

但是,我不是 C# 专家,将它传递给 ProcessStart 的方法可能需要摆弄。也不确定在哪里放置 sudo。

你会试着让别人知道吗?