0

我正在创建一个简单的日志文件,其中将包含日期/时间以及对确定的操作负责的用户。我正在做的事情与我想从 java Servlet 运行 Shelscript(即 shellscript.sh)时通常做的事情相同:

ProcessBuilder pl = new ProcessBuilder("/usr/bin/bash", "-c", "echo ($date) \" - Action_Name - " + User + "\" >> " + "myDirectory/logs/myLog.log");
pl.start();

我单独使用这 2 个命令,但是在执行它们之后,我看不到里面的任何东西myDirectory/logs/myLog.log

为什么这段代码不起作用?

4

1 回答 1

2

发生这种情况是因为您不小心指定了 bash 的($date)意思$(date),因此 bash 抱怨语法错误并且没有执行该命令。你要这个:

ProcessBuilder pl = new ProcessBuilder("/usr/bin/bash", "-c", "echo $(date) \" - Action_Name - " + User + "\" >> " + "myDirectory/logs/myLog.log");
pl.start();

如果您检查了进程返回代码或打印了它的错误输出,您可能会看到失败。如果您想以编程方式确定命令是否失败,请检查返回码。

但就像评论中提到的 Qwerky 一样,头脑确实令人难以置信。

于 2013-08-13T15:54:55.067 回答