2016-05-19 4 views
1

Raspbianで実行されているPiでシェルコマンドを実行しようとしていますが、引用符が消えているようです。ここでC#プログラムからシェルコマンドを渡すと、引用符が消える

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); 

は、私が実行しようとしているスクリプトです:

を無効なコマンドラインオプション(+%D%:

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

そして、ここでは、私が取得していますエラーです

ご覧のとおり、引用符は消えているようです。

アイデア? $(日付+ "" %: "$(日付+" +引用符+ "%d個の%のm個の%のY_%のHの%M-%S" +引用符+ ")@付き

" を置き換える

+0

私はテストすることはできませんが、引用符をエスケープしてみてください... "\\\" " – SparK

+0

@SparKよく引用符がありますが、まだ動作しません:"無効なコマンドラインjpg) " – JTSKhy

+0

@ Sparkあなたはそれの権利を持っています、私は動作中のDotNetFiddleへのリンクを以下に掲示しました – Pseudonym

答えて

1

これは直接のようにはできません。$()はシェル式であり、シェルを起動するのではなく、raspistillコマンドだけを呼び出します。そこで私が見る問題(コメントを参照してください)

一つの方法として、「引用」ではないことのようです: フォーマットのC#内部の日付文字列を(私は専門家だが、可能でなければなりません)と直接

そのフォーマットされた文字列を渡します
... +" -o" + " /home/pi/Desktop/camera/" + formateddate + ".jpg"; 

その他の方法: はSH/binに/を呼び出し、パラメータとして

"-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を置くべきかわからない。

あなたに知らせてもらいますか?

+0

私は直接2番目の方法を試して、それは完全に働いた。どうもありがとう。 – JTSKhy

1

試してみますD%mの%のY_%のHの%M-%のS "") "

は、二重引用符エスケープする:" あなたは、実際にそうように二重引用符を倍にする必要があり

: ""

Hereです私はこれをテストするために使用したDotNetFiddle

+0

"Filenameに%dまたは%%が含まれていない%文字が含まれています。申し訳ありませんが無効なコマンドラインオプション(/ home/pi/Desktop/camera/$(date +%d%m%Y_%H%M- %S))」と表示されます。 – JTSKhy

+0

@Pseudonym、面白くない "Dot ** Not ** Fiddle"笑 – SparK

+0

@JTSKhyあなたのコマンドの問題のように聞こえる、あなたが何をしようとしているのか少し詳しく説明できますか?どうやって? – Pseudonym

関連する問題