Код выхода при вызове без аргументов

У меня есть сценарий, который требует хотя бы одного аргумента. Если аргументы неверны, я, очевидно, верну ненулевой код выхода.

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

  • 0 (Успех)
  • одно из значений [1-125] (ошибка)

Аргумент можно было бы сделать в любом случае. Рекомендуется ли какой-либо вариант?

bash,exit-code,

0

Ответов: 3


3

Это зависит от того, хотите ли вы, чтобы вызывающие ваши скрипты знали программно, почему это не удалось.

Если, например, он будет когда-либо управляться человеком, вы можете просто вернуться 1и полагаться на текст ошибки, чтобы сообщить им.

Вы можете даже вернуть нуль, независимо от того, хотите ли вы когда-либо хотеть, чтобы человек мог легко узнать (через выход), если он потерпел неудачу, но я бы подумал об этой очень плохой форме - Microsoft допустила эту ошибку в прошлом, когда некоторые из их команд не устанавливались %errorlevel%, это очень трудно для сценария , чтобы выяснить , является ли это работает или нет.

Даже если вы решите не указывать, почему это не удалось, вы должны хотя бы указать, что он не прошел.

Если вы хотите, чтобы программа могла легко определить, почему она не удалась, верните другой код для каждого видимого типа ошибки.


2

Любая команда Unix при возврате элемента управления к его родительскому процессу возвращает код с номером от 0 до 255.

Успех традиционно представлен exit 0; отказ обычно указывается с ненулевым кодом выхода. Это значение может указывать на разные причины отказа.

Итак, у вас есть еще один случай неудачного завершения вашей программы, который следует рассматривать как возвращающий правильный код ошибки, а не 0.

Также обратите внимание, что традиционные системные вызовы Unix не сигнализируют код ошибки для пустых аргументов, они должны быть обнаружены явно. Есть слишком длинный список аргументов ( E2BIG) и недопустимые аргументы ( EINVAL).


0

Это то, что я решил использовать, основываясь главным образом на ответах Inians и представленных здесь закрытых кодах выхода .

Я решил несколько повторить использование кодов выхода, определенных в /usr/include/asm-generic/errno-base.h1 . Не было ничего подходящего для «слишком маленьких аргументов», поэтому я выбрал первый из диапазона 64-113.

# Error codes
E2BIG=7
EINVAL=22
E2SMALL=64

NAME="my-script"
USAGE=$(cat << END
    the help text
RETURN CODES
    $NAME has the following return codes:

    0   success
    $E2BIG  Argument list too long
    $EINVAL Invalid argument
    $E2SMALL    Argument list too short
END
)

# This script requires exactly one argument. If less are provided it prints
# the USAGE instructions
if [ ${#} -lt 1 ] ; then
    printf '%s
' "${USAGE}"
    exit $E2SMALL
fi
if [ "${1}" = "-h" ] || [ "${1}" = "--help" ] ; then
    printf '%s
' "${USAGE}"
    exit 0
fi
if [ ${#} -gt 1 ] ; then
    printf '%s
' "${USAGE}"
    exit $E2BIG
fi

Это немного подробный, но, по крайней мере, есть правильно определенный код ошибки, если скрипт называется ненадлежащим образом.


1 Это может быть спорным, но поскольку коды уже определены ...

Баш, экзит-код,
Похожие вопросы
Яндекс.Метрика