我正在尝试在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)
如您所见,引号似乎已经消失。
有什么想法吗?
答案 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。
你会尝试不知道吗?