Я хочу написать функцию java, которая будет сканировать файл bash и определять, есть ли какие-либо команды, требующие ввода пользователем.Я знаю, что есть команда read
, предназначенная для ввода пользовательского ввода, и я думаю, что она единственная.
Я написал класс Validator, который принимает скрипт (простой класс, который просто загружает содержимоескрипт для строковой переменной, использующий Files.readAllBytes(Paths.get(path))
).
Вот мой класс 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
не удается захватить чтение из-за 4 пробелов.Есть ли какой-нибудь простой способ, которым я могу справиться с этим, используя поток или лямбду?Или я должен переключиться на регулярное выражение?