从 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
这是我遇到的错误:
Invalid command line option (+%d%m%Y_%H%M-%S).jpg)
如您所见,引号似乎已经消失了。
有什么想法吗?
尝试更换
"$(日期 +" + 引用 + "%d%m%Y_%H%M-%S" + 引用 + ")
与:@"$(date+""%d%m%Y_%H%M-%S"")"
转义双引号字符:"
你实际上必须像这样使用双引号:“”
Here 是我用来测试这个的 DotNetFiddle
不可能像这样直接执行 - $( ) 是一个 shell 表达式,您不调用 shell 而只是调用 raspistill 命令。我似乎没有看到 "quoting" 个问题(见评论)
一种方式:
在 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。
你会试着让别人知道吗?
我试图在 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
这是我遇到的错误:
Invalid command line option (+%d%m%Y_%H%M-%S).jpg)
如您所见,引号似乎已经消失了。
有什么想法吗?
尝试更换 "$(日期 +" + 引用 + "%d%m%Y_%H%M-%S" + 引用 + ")
与:@"$(date+""%d%m%Y_%H%M-%S"")"
转义双引号字符:"
你实际上必须像这样使用双引号:“”
Here 是我用来测试这个的 DotNetFiddle
不可能像这样直接执行 - $( ) 是一个 shell 表达式,您不调用 shell 而只是调用 raspistill 命令。我似乎没有看到 "quoting" 个问题(见评论)
一种方式: 在 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。
你会试着让别人知道吗?