Попытка:
perl -pe 's/^((?:(?>(?:\e\[.*?m)*).){50}).*/$1\e[m/'
Это принимает escape-последовательности ansi-типа.
Это с escape-последовательностями как \e[31m
выбирать цвет и \e[m
или \e[0m
сбрасывать его. Выше, добавляем мы \e[m
в конце каждой строки, но это не могло бы всегда быть желательно в зависимости от входа.
"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), сделал.
В моей Ubuntu, hostname -h
вернуть 255
.
Используя apt-get source hostname
для получения его источника, погружающегося в него, мы видим это при использовании -h
опции, hostname
команда возвратится -1
, который является вне диапазона:
void
usage(FILE *stream)
{
....
exit(-1);
}
В main
функция, строка 501:
case 'h':
usage(stdout);
break;
В более поздних версиях hostname
, версия 3.15, это возвращается -1
.
usage(FILE *stream)
{
fprintf(stream,
"Usage: hostname [-b] {hostname|-F file} set host name (from file)\n"
...
...
exit(-1);
}
Это похоже на ситуацию, где состоянием управляют как интервал со знаком, но затем в какой-то момент преобразовывают в неподписанный интервал.