Почему делает имя хоста-h, возвращаются 255

Попытка:

perl -pe 's/^((?:(?>(?:\e\[.*?m)*).){50}).*/$1\e[m/'

Это принимает escape-последовательности ansi-типа.

Это с escape-последовательностями как \e[31m выбирать цвет и \e[m или \e[0m сбрасывать его. Выше, добавляем мы \e[m в конце каждой строки, но это не могло бы всегда быть желательно в зависимости от входа.

0
12.02.2014, 04:39
3 ответа

"hostname -h"

не возвращается 255 на моей машине RHEL.

это действительно возвращает ошибку 4, которые имеют смысл

hostname -h
Usage: hostname [-v] {hostname|-F file}      set hostname (from file)
........
echo $?
4

Если Вы будете смотреть на hostname.c от сети-utils, то Вы будете ясно видеть что:

static void usage(void)
{
    fprintf(stderr, _("Usage: hostname [-v] {hostname|-F file}      set hostname (from file)\n"));
........
  exit(4); /* E_USAGE */
}

и ссылка на использование () в здесь в том же файле:

........
    case '?':
    case 'h':
    default:
        usage();

    };

Таким образом, я не действительно уверен, почему Вы добираетесь 255, на версии MAC Вы могли бы стать "1", но я никогда не замечаемыми "255".

РЕДАКТИРОВАНИЕ Вы правы, я только что посмотрел на fedora19, и имя хоста прибывает из об/мин имени хоста, и действительно для использования они действительно возвращаются 255:

void
usage(FILE *stream)
{
        fprintf(stream,
.....
 exit(-1);
}

;

Таким образом, здесь я попытаюсь объяснить Ваш беспорядок.

Ну, сначала делая выход (-1) существует ошибка программистом, по крайней мере, для среды POSIX, с тех пор в такой ОС что-либо, что не 0 в статусе выхода рассмотрело ОТКАЗ, но:

Что относительно выхода () функция найдена в стандартной библиотеке для C?

Это - страница справочника, говорит нам, что “выход () функция вызывает нормальное завершение процесса, и значение состояния и 0377 возвращено к родителю”.

Теперь, состояние и 0377?

Что это означает?

Ну, 0377 377 в восьмеричном, который является 255 в десятичном числе или 0xFF в шестнадцатеричном.

#include <stdlib.h>
void exit(int status);

Так, если выход берет аргумент со знаком, но возвращается, 0xFF замаскировал тот к своему родителю (который является оболочкой), и “-1” представлен как все в two's-дополнении, это единственное означает, что значение оболочка собирается видеть и, таким образом, $? движение должно сохранить = 0xff Вспомните, что 0xff 255, и это - в значительной степени он.

Даже если программист знает, что весь пользователь доберется, 255, когда он называет выход (-1), это - слабая привычка сделать это при программировании в среде POSIX. Код в конечном счете достигнет кого-то, который неправильно поймет значение-1 (255) аргумент и поднимет вопрос как Вы (OP), сделал.

2
28.01.2020, 02:20
  • 1
    Это возвращается 255 на Fedora 19. На более новых дистрибутивах имя хоста является своим собственным пакетом также. –  slm♦ 12.02.2014, 05:17
  • 2
    Спасибо Danila, @slm прав, выбран это в качестве корректного ответа для усилия. –  sthysel 12.02.2014, 06:22

В моей Ubuntu, hostname -h вернуть 255.

Используя apt-get source hostname для получения его источника, погружающегося в него, мы видим это при использовании -h опции, hostname команда возвратится -1, который является вне диапазона:

void                                                                            
usage(FILE *stream)
{
....
    exit(-1);                                                                   
}

В main функция, строка 501:

case 'h':                                                               
            usage(stdout);                                                      
            break;
1
28.01.2020, 02:20

В более поздних версиях hostname, версия 3.15, это возвращается -1.

usage(FILE *stream)
{
  fprintf(stream,
    "Usage: hostname [-b] {hostname|-F file}         set host name (from file)\n"
...
...
  exit(-1);
}

Это похоже на ситуацию, где состоянием управляют как интервал со знаком, но затем в какой-то момент преобразовывают в неподписанный интервал.

1
28.01.2020, 02:20

Теги

Похожие вопросы