Собственные команды gogoshell
Я пытаюсь использовать gogo-shell для добавления некоторых консольных команд. Например, я создаю команды add и show.
public void add(CommandSession commandSession, int i) {
List<Integer> il = commandSession.get("list");
if (il == null) {
il = new ArrayList<Integer>();
il.add(i);
commandSession.put("list",il)
} else {
il.add(i)
}
}
public void show(CommandSession commandSession) {
List<Integer> il = commandSession.get("list");
il.foreach(System.out::println);
}
и когда я использую их как
add 1 | add 2 | add 3 | add 4 | show
Я получаю что-то вроде
null pointer Exception
или же
1
3
4
2
Я думаю, что это происходит потому, что каналы (добавить) работает параллельно. Так как я могу написать команду, где трубопровод будет последовательным.
1 ответ
Конвейеры в gogo (как в bash) ожидают, что они будут использовать данные из стандартного ввода и выдают данные в стандартном выводе. Каждый элемент в конвейере запускается одновременно как отдельный поток.
Команда 'add' в вашем примере не использует и не генерирует данные о стандартных входах / выходах и поэтому не подходит для запуска в конвейере.
Если вы просто хотите, чтобы команды выполнялись последовательно, используйте ";" разделитель команд:
г! добавить 1; добавить 2; добавить 3; добавить 4; шоу