Можно ли очистить сообщение, вызванное ошибками $ {arg? Word} - PullRequest
2 голосов
/ 28 октября 2011

Когда bash интерпретирует скрипт и встречает

${arg?error message}

, когда аргумент не установлен, скрипт завершает работу после печати сообщения об ошибке.К сожалению, bash добавляет к сообщению об ошибке «$ 0: line $ LINENO: arg:».Можно ли скрыть дополнительную информацию?Я хотел бы, чтобы сообщение об ошибке было именно «сообщением об ошибке».

Ответы [ 2 ]

2 голосов
/ 28 октября 2011

Вы, вероятно, должны избегать конструкции ${PARAMETER?WORD} и делать это вручную.Например, что-то вроде

if [ -z "${arg+set}" ]; then
    printf 'error message\n' >&2
    exit 2
fi
0 голосов
/ 28 октября 2011

Я предполагаю, что если вы хотите сделать это, вы, возможно, не достигнете своей конечной цели способом, наиболее естественным в Bash. Примерно так должно быть лучше:

if [ -z $arg ]; then
    echo error message >&2;
else
    $arg
fi

Отвечая на вопрос более прямо, хотя:

(${arg?error message}) |& sed "s/.*: .*: //"

Объяснение: |& соединяет стандартную ошибку блока кода в скобках (кстати, это необходимо для работы) в sed (редактор потоков), который удаляет часть сообщение, которое вы не хотите с регулярным выражением.

...