簡體   English   中英

從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

這是我得到的錯誤:

無效的命令行選項(+%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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM