Slide 26 de 37

Terminal e processos

Rodando outro programa
proc main(): void {
	result := hive.term.exec("hostname", [], "")
	if result is Result.Ok(output) {
		echo "esta máquina se chama: {output}"
	} else if result is Result.Error(why) {
		echo "não foi possível rodar hostname: {why.message}"
	}
}
Perguntando sobre o próprio terminal
proc main(): void {
	echo hive.term.isTerminal()
	echo hive.term.args()
}
hive.term é I/O de terminal orientado a linhas: print escreve no stdout, status escreve no stderr — o que um programa está fazendo, em contraste com o que foi pedido a ele — isTerminal diz se a saída de erro padrão é uma pessoa ou um pipe, e read/readSecret bloqueiam por uma linha de entrada, o segundo com o eco do terminal desligado. args() lê a linha de comando, e exit(code) termina o programa na hora. Rodar outro programa é duas chamadas separadas por quem está falando com o terminal: exec devolve tudo que o comando escreveu e transforma uma saída diferente de zero em um Result.Error, enquanto attach dá ao comando o próprio terminal deste programa e responde com seu status de saída. Nenhum dos dois toca em um shell, então nada em um argumento pode ser lido como um.