在我的Java代码中,我正在这样做:
Process process = rt.exec("sudo bash -c \"printf \"test\" >> /etc/wpa_supplicant/wpa_supplicant.conf\"");
但是bash让我看到这个错误:
"test">>: -c: line 0: unexpected EOF while looking for matching `"'
出什么问题了?
答案 0 :(得分:1)
删除所有转义字符,您的exec
字符串将变为:
sudo bash -c "printf "test" >> /etc/wpa_supplicant/wpa_supplicant.conf"
这显然是Shell命令的语法错误。
您需要的东西可能两次逃脱:
您需要执行的操作:printf "test" >> /etc/wpa_supplicant/wpa_supplicant.conf
在sudo bash -c
中换行:sudo bash -c "printf \"test\" >> /etc/wpa_supplicant/wpa_supplicant.conf"
在rt.exec()
中换行:rt.exec("sudo bash -c \"printf \\\"test\\\" >> /etc/wpa_supplicant/wpa_supplicant.conf\"")
此外,在此处使用sudo
时,您可能会遇到意外的现象,即获取root特权密码。
答案 1 :(得分:0)
Runtime.exec(String)
从根本上被破坏了。它不支持任何形式的引号或转义,因此不能用于运行任何依赖传递文字空白的命令。
改为使用Runtime.exec(String[])
:
Process process = rt.exec(new String[] {
"sudo", "bash", "-c", "printf \"test\" >> /etc/wpa_supplicant/wpa_supplicant.conf" });
请注意,这要求sudo
正确配置为无密码,非交互式使用,这不是默认设置。能够以交互方式运行该命令并不会 not 表示系统已正确配置。您必须阅读流程的错误流才能获得有用的诊断信息,否则它似乎根本无法正常工作。