【发布时间】:2020-04-20 02:06:23
【问题描述】:
我在将命令列表从 Java 发送到 CMD 时遇到问题。 我的目标是以编程方式从 Java 更新 Crontab 调度脚本。
我觉得问题的发生是因为“;”发送的字符串中“-l”后面的符号作为 CMD 中的命令分隔符。我尝试过直接使用字符串,并使用进程构建器(使用不同的组合,甚至通过拆分每个空格的命令):
String cmd = "(crontab -l; echo '9 * * * * sudo python /home/pi/Desktop/led.py') | sort - | crontab -";
Process p = Runtime.getRuntime().exec(cmd);
String commandArray[] = {"(crontab", "-l,", "\"echo '9 * * * * sudo python /home/pi/Desktop/led.py\")", "|", "sort", "-", "|", "crontab", "-"}
Process p = new ProcessBuilder (commandArray).redirectErrorStream(true).start();
在这两种情况下,我都会得到以下信息:
java.io.IOException: Cannot run program "(crontab": error=2, No such file or directory
但是,当直接在终端运行存储在 String cmd 中的命令时,它可以正常工作。 有没有办法让控制台通过像HERE 这样的子shell 将输入的运行时字符串视为命令列表? 谢谢。
【问题讨论】:
-
似乎是 bash/sh 脚本,所以您可以选择 /bin/bash 或 /bin/sh 作为命令,然后将这些作为参数传递
-
嗨,Ahmet,你能举个例子吗?顺便说一句,我设法让它同时运行,方法是将 crontab 命令存储在 .txt 文件中,然后在以下位置运行“crontab -”:cat /home/pi/Desktop/Automation/schedule_commands.txt | crontab -