“ test” >>:-c:第0行:寻找匹配的“”'时出现意外的EOF

时间:2018-12-25 18:58:48

标签: java linux bash

在我的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 `"'

出什么问题了?

2 个答案:

答案 0 :(得分:1)

删除所有转义字符,您的exec字符串将变为:

sudo bash -c "printf "test" >> /etc/wpa_supplicant/wpa_supplicant.conf"

这显然是Shell命令的语法错误。

您需要的东西可能两次逃脱:

  1. 您需要执行的操作:printf "test" >> /etc/wpa_supplicant/wpa_supplicant.conf

  2. sudo bash -c中换行:sudo bash -c "printf \"test\" >> /etc/wpa_supplicant/wpa_supplicant.conf"

  3. 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 表示系统已正确配置。您必须阅读流程的错误流才能获得有用的诊断信息,否则它似乎根本无法正常工作。