[英]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
這是我得到的錯誤:
無效的命令行選項(+%d%m%Y_%H%M-%S).jpg)
如您所見,引號似乎消失了。
有任何想法嗎?
嘗試替換“ $(date +” +引用+“%d%m%Y_%H%M-%S” +引用+“)
與:@“ $(date +”“%d%m%Y_%H%M-%S”“)”
要轉義雙引號字符:
實際上,您必須像這樣將雙引號加倍:“”
這是我用來測試的DotNetFiddle
不可能像這樣直接發生-$()是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。
您會嘗試讓我們知道嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.