![](/img/trans.png)
[英]How to open linux terminal from java and be able to execute commands in it?
[英]How to programmatically send List of commands (with parenthesis) from Java to linux terminal? Crontab schedulation related
我无法将命令列表从 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这样的子外壳将输入的运行时字符串视为命令列表? 谢谢你。
好的,Ahmet 在评论中建议尝试将其作为 bash 脚本运行,从而解决了命令读取错误的问题。 原因似乎是因为Runtime.exec() 不能使用管道“|”。 我还设置了从文件运行 crontab 的命令,而不是硬编码预期的 crontab 命令,它看起来像这样:
String[] cronString = {
"/bin/sh",
"-c",
"sudo cat /home/pi/Desktop/Automation/schedule_commands.txt | crontab -"
};
System.out.println(cmd3);
Process p3 = Runtime.getRuntime().exec(cronString);
为澄清起见, schedule_commands.txt 包含:
0 18 * * * sudo python /home/pi/Desktop/led.py
0 * * * * java -classpath /home/pi/Desktop/Automation automation
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.