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

时间:2016-05-19 19:59:19

标签: c# shell raspberry-pi raspbian

我正在尝试在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

这是我得到的错误:

  

无效的命令行选项(+%d%m%Y_%H%M-%S).jpg)

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

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

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

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

要逃避双引号字符:"

你实际上必须加倍双引号:""

Here是我用来测试这个

的DotNetFiddle

答案 1 :(得分:1)

这不是直接可能的 - $()是一个shell表达式,你不调用shell而只调用raspistill命令。我看到似乎没有“引用”问题(见评论)

单向: 在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。

你会尝试不知道吗?