Как да проверим статуса на изхода на команда в Linux


Когато работите на Linux система, всяка команда, която изпълнявате, връща код на статуса (наричан още код на изхода или върнат код), който ви уведомява дали е била изпълнена успешно или е неуспешна.

Като потребител на Linux, особено ако учите програмиране на шел или отстраняване на проблеми, е изключително важно да знаете как да проверите статуса на завършване на команда.

В тази статия ще обясня какво означава статус на изход, как да го проверите и защо е важен.

Какво е статус на изхода в Linux?

Всякога, когато изпълнявате команда в Linux, системата тихо ви дава оценка в края, която е просто число, наречено код за изход (или код на връщане).

  • Ако числото е 0, това означава, че командата е изпълнена успешно, без никакви грешки.
  • Ако числото не е 0, това означава, че командата не е успяла да бъде изпълнена по някакъв начин.

Помислете за това по следния начин:

  • Всичко е наред!
  • Нещо се обърка (обща грешка)
  • 2, 127, 126, и т.н.=Различни видове проблеми, като «файлът не е намерен» или «командата не може да се изпълни».

Не винаги виждате тези числа на екрана, но Linux ги съхранява в специална променлива, наречена $?. Можете да я проверите по всяко време, за да разберете дали последната ви команда е изпълнена успешно или е неуспешна.

Съвет: Тези кодове за изход са особено важни, когато пишете Bash скриптове, защото ви помагат да взимате решения в зависимост от това дали командата е преминала или е неуспешна.

Как да проверим изходния статус на команда

В Linux, изходният статус на последната команда, която сте изпълнили, се съхранява в специална shell променлива, наречена:

$?

Най-добрият начин да разберете статуса на изхода е всъщност да изпълните команди.

Пример 1: Успешна команда

ls
echo $?

Какво се случва тук:

  • Първо, ls показва файловете в текущата ви директория.
  • Тъй като командата работи без никакви проблеми, Linux задава изходния статус на 0.
  • Когато веднага проверим статуса, използвайки echo $?, той извежда 0.

Кодът за изход 0 винаги означава успешен резултат. Така че в този случай команда ls направи точно това, което очаквахме.

Пример 2: Неуспешна команда

ls /nonexistent
echo $?

Какво се случва тук:

  • Опитахме се да изброим файловете в директория, наречена /nonexistent.
  • Тази директория не съществува в системата, така че командата ls не успява.
  • След това Linux задава статуса на изхода на ненулево число (в този случай 2).
  • Когато проверим с echo $?, виждаме:

Пример 3: Използване на статус на изхода в скрипт

Статусите на изхода стават наистина полезни, когато ги използвате в шел скриптове, тъй като скриптовете често трябва да взимат решения в зависимост от това дали командата е успешна или не.

Нека разгледаме един прост пример:

#!/bin/bash

ls /etc > /dev/null
if [ $? -eq 0 ]; then
    echo "Command successful!"
else
    echo "Command failed!"
fi

Какво се случва тук:

  • Ако командата ls работи → извежда “Командата е успешна! ”.
  • Ако не успее → отпечатва „Командата не успя! “.

По-чист начин: Използване на && и ||

Вместо да проверявате $? всеки път, можете да свържете команди:

  • command && echo "Успех" → изпълнява втората команда само ако първата е успешна.
  • command || echo "Неуспешно" → изпълнява втората команда само ако първата не е успешна.

Пример:

ls /etc && echo "Found it!" || echo "Not found!"

Общи кодове за статус на изхода

Ето някои често срещани кодове за извеждане:

Изходен кодЗначение
Успех
1Обща грешка
2Неправилна употреба на командата на черупката
126Намерена команда, но не може да бъде изпълнена
127Команда не е намерена
130Скриптът е прекратен с Ctrl+C
255Статус на изхода извън обхвата
Заключителни мисли

Статусът на изхода е малко число, но играе голяма роля при изпълнението на команди интерактивно или при писането на шел скриптове. Разбирането на кодовете за изход помага да отстранявате проблеми и да контролирате работния си процес.

Следващия път, когато команда не работи както се очаква, не се ограничавайте само до разглеждане на съобщението за грешка, а проверете и статуса на изхода!