【发布时间】:2014-05-13 16:20:26
【问题描述】:
我在执行包含 while 循环的 shell 脚本时遇到了严重问题。这是我的 shell 脚本:
echo Here 1
sleep 0.05
echo Here 2
sleep 0.05
echo Here 3
ic=70
while [ $ic -ge 40 ]
do
#sleep 0.05
ic=$[$ic-1]
echo Here $ic
done
当我以/home/pi/tbe/testSleep.sh 的身份从终端正常执行脚本时,它正在工作。并打印所有echos。
现在我已经写了这个java方法来执行文件:
public static void main(String[] args) throws IOException, InterruptedException {
String command = "/home/pi/tbe/testSleep.sh";
System.out.println("Executing command: " + command);
Process process = new ProcessBuilder(command).start();
BufferedReader reader = new BufferedReader(new InputStreamReader(
process.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
process.waitFor();
int exitValue = process.exitValue();
System.out.println("Command executed. Exit value: " + exitValue);
process.destroy();
}
当我执行它时,我只能看到以下输出:
Executing command: /home/pi/tbe/testSleep.sh
Here 1
Here 2
Here 3
Here $[70-1]
Command executed. Exit value: 0
这真的很奇怪。任何指针都会对我很有帮助。
【问题讨论】:
-
指定要用于 shell 脚本的 shell。 String[] command = {"/bin/bash", "/home/pi/tbe/testSleep.sh"};或者在脚本本身中添加 shebang - #!/bin/bash (作为第一行)。
-
您正在使用
bash测试您的脚本。当从 java 进程调用时,使用sh调用脚本。该脚本利用了sh中不支持的功能,因此行为有所不同。 -
脚本似乎没有被正确解释,因为它不是由 shell 运行的。您是否尝试添加 #!/bin/bash?
-
谢谢大家。问题是shebang。我没有按照@amit_g 的建议通过创建流程构建器来添加#!/bin/bash。如果您可以发表评论作为答案,我会接受。再次感谢。