我想编写一个Java函数,它将扫描bash文件并查找是否有需要用户输入的命令。我知道有一个命令read
用于捕获用户输入,我认为这是唯一的命令。
我编写了一个Validator类,该类带有一个脚本(一个简单的类,它使用Files.readAllBytes(Paths.get(path))
将脚本的内容加载到String变量中。)
这是我的Validator类:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.stream.Stream;
public class Validator {
Script script;
String[] interactiveCommands = {"read"};
public Validator(Script script) {
this.script = script;
}
public void validateInteractiveCommands() {
for (String string : interactiveCommands) {
streamService(string);
}
}
private void streamService(String string) {
try (Stream<String> stream = Files.lines(Paths.get(script.getPath()))) {
stream.filter(lines -> lines.startsWith(string))
.forEach(this::printFound);
} catch (IOException e) {
e.printStackTrace();
}
}
private void printFound(String string) {
System.out.println("Found an interactive command: " + string);
}
}
但是在这种情况下,我仅在行开始时捕获读取。 在这种情况下:
if true ; then
read a
fi
由于有四个空格,因此无法捕获读取。 有什么简单的方法可以使用流或lambda处理它?还是应该切换到regexp?
答案 0 :(得分:3)
“我知道有一条命令可以读取用户输入,我认为这是唯一的一条命令。”
实际上,无法确定Shell脚本中的命令是否要捕获用户输入。以下是一些示例:
rm -i *
cat > file
实际上,(通常)无法确定shell脚本可能执行的命令 。例如:
#!/bin/sh
echo running "$@"
"$@"