"hostname -h"
não retorna 255 na minha máquina RHEL.
retorna erro 4 que faz sentido
hostname -h
Usage: hostname [-v] {hostname|-F file} set hostname (from file)
........
echo $?
4
Se você der uma olhada em hostname.c de net-utils, verá claramente que:
static void usage(void)
{
fprintf(stderr, _("Usage: hostname [-v] {hostname|-F file} set hostname (from file)\n"));
........
exit(4); /* E_USAGE */
}
e referência ao uso () aqui no mesmo arquivo:
........
case '?':
case 'h':
default:
usage();
};
Então, eu não sei ao certo por que você está comprando 255, na versão MAC você pode ter "1", mas nunca vi "255".
EDIT você está certo, eu apenas olhei para fedora19 e hostname vem do hostname RPM e de fato para o uso eles retornam 255:
void
usage(FILE *stream)
{
fprintf(stream,
.....
exit(-1);
}
;
Então, aqui vou tentar explicar sua confusão.
Bem, primeiro fazendo exit (-1) existe um erro de um programador, pelo menos para o ambiente POSIX, já que em tal sistema operacional qualquer coisa que não 0 no status de saída é considerada FAILURE, mas:
E a função exit () encontrada na biblioteca C padrão?
A página de manual informa que “a função exit () causa o encerramento normal do processo e o valor do status & 0377 é devolvido ao pai ”.
Agora, status & 0377?
O que isso significa?
Bem, 0377 é 377 em octal, que é 255 em decimal ou 0xFF em hexadecimal.
#include <stdlib.h>
void exit(int status);
Portanto, se exit tiver um argumento assinado, mas retornar um 0xFF mascarado para seu pai (que é shell), e “-1” é representado como todos em complemento de dois, isso significa apenas que o valor do shell vai ver e, assim, $? vai armazenar = 0xff
Lembre-se que 0xff é 255, e isso é muito bonito.
Mesmo se o programador estiver ciente de que todos os usuários obterão é 255 quando ele chama exit (-1), é um mau hábito fazer isso durante a programação no ambiente POSIX. O código acabará por chegar a alguém que irá entender mal o significado do argumento -1 (255) e levantar uma questão como você (OP) fez.
Espero que isso ajude.