2014-09-10 2 views
0

Я пытаюсь использовать gogoshell, чтобы добавить некоторые консольные команды Например я создавать команды добавления и показатьgogoshell собственных команд ТРУБОПРОВОДНЫХ

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 

Я думаю, что это происходит потому, что трубы (добавить) работают параллельно. Итак, как я могу написать команду, где трубопровод будет последовательным.

ответ

0

Трубопроводы в гого (как в bash) рассчитывают потреблять данные со стандартного ввода и производить данные на стандартном выходе. Каждый элемент в конвейере работает одновременно, как отдельный поток.

Команда «добавить» в вашем примере не потребляет или не производит данные на стандартном входе/выходе и поэтому не подходит для работы в конвейере.

Если вы хотите, чтобы команды выполнялись последовательно, используйте ';' командный сепаратор:

g! добавить 1; добавить 2; добавить 3; добавить 4; показать