java - shell脚本与java运行时不一致

标签 java linux shell batch-file runtime

脚本如下。

#!/bin/bash
if [ ! -s $CATALINA_HOME ]; then
echo "Error: CATALINA_HOME not set!!!"
exit -1
fi

SHUTDOWN_SCRIPT="$CATALINA_HOME/bin/shutdown.sh"
STARTUP_SCRIPT="$CATALINA_HOME/bin/startup.sh"

#execute shutdown.sh
echo "Doing Shutdown"
$SHUTDOWN_SCRIPT
sleep 5
#execute startup.sh
echo "Doing Startup"
$STARTUP_SCRIPT

exit 0

它只是关机,无法启动。

我正在运行以下代码

Runtime rn = Runtime.getRuntime();
Process proc; 
proc = rn.exec("/script/restart.sh");
proc.waitFor(); 

我对 .bat 文件有类似的问题,我用

修复了它
Runtime rn = Runtime.getRuntime();
Process proc; 
proc = rn.exec("cmd /c start /script/restart.bat"); 
proc.waitFor();

使用“cmd/c start”调用解决了我的问题。对 .sh 文件有类似的建议吗?

最佳答案

检查文件权限是否有执行权限,如果没有则设置执行权限。

执行 which bash 它将返回 bash 的路径 尝试使用示例 /bin/bash yourShell.sh/在 Runtime#execProcessBuilder 中 bin/sh yourShell.sh(推荐)

saravana@ubuntu:~$which bash /bin/bash

    String[] commmands = { "/bin/bash", "/script/restart.sh" }; // or { "/bin/sh", "/script/restart.sh" }
    Runtime.getRuntime().exec(commmands); //or
    new ProcessBuilder(commmands).start(); //Recommended

关于java - shell脚本与java运行时不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33116403/

相关文章:

java - 替换字符串数组中的特定字符串

java - Ant:关于dirsets的两个问题

c++ - 在另一个共享库中使用共享库

android - 无法使用 "dd"复制文件

linux - 从 shell 脚本获取变量的值

java - Spring - applicationContext.xml 中的路径

java - 如何检查我的数组中是否包含包含空格的单词?

c++ - 如何在 Linux 上使用带有 EG20T 芯片组的英特尔凌动 Q7 模块上的 CAN 总线?

windows - 在 Linux 和 Windows 之间切换时如何处理符号链接(symbolic link)?

linux - "<<"运算符如何在 linux shell 中工作?