-1

При запуске команды, если команда отсутствует, отображается некоторая информация о сбое команды.

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

Всякий раз, когда команда завершается с ошибкой $? значение будет 127 . Я должен поймать это неудачное событие и выполнить там свои команды.

2 ответа2

3

У меня есть этот фрагмент в моем /etc/bash.bashrc (Ubuntu 14.04.4 LTS):

# if the command-not-found package is installed, use it
if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found/command-not-found ]; then
    function command_not_found_handle {
            # check because c-n-f could've been removed in the meantime
                if [ -x /usr/lib/command-not-found ]; then
           /usr/lib/command-not-found -- "$1"
                   return $?
                elif [ -x /usr/share/command-not-found/command-not-found ];     then
           /usr/share/command-not-found/command-not-found -- "$1"
                   return $?
        else
           printf "%s: command not found\n" "$1" >&2
           return 127
        fi
    }
fi

Похоже, вы должны перезаписать функцию command_not_found_handle . Я не знаю, нужна ли команда package command-not-found для этого; Наверное, нет, но я могу ошибаться.

Пример:

function command_not_found_handle { echo BOOM! ; }

Результат:

$ foo12345
BOOM!
$ echo "echo is valid command"
echo is valid command
$ agrgokdnlkdgnoajgldfnsdalf grhofhadljh
BOOM!
$ cat /etc/issue
Ubuntu 14.04.4 LTS \n \l

$ catt /etc/issue
BOOM!

Чтобы вернуться (быстро и грязно):

# Assuming you haven't modified /etc/bash.bashrc
. /etc/bash.bashrc
# Quick and dirty, because if your ~/.bashrc or ~/.bash_profile //
# overwrites some settings from /etc/bash.bashrc //
# you need to source them again.
# Things may get complicated, I won't cover all the ifs here.
# Logout and login again for the clean start.

Измените /etc/bash.bashrc чтобы изменить поведение "команда не найдена" для всех пользователей. Определите свой собственный command_not_found_handle в ~/.bashrc чтобы он работал только для вас. Или напишите два файла с правильными определениями функций, чтобы в любое время включать и отключать ваш взлом. Важно: не запускайте файлы, используйте их так:

. ~/.hack_enable
. ~/.hack_disable

Где .hack_enable определяет вашу функцию, .hack_disable возвращается к исходной (из первого кодового блока моего ответа или к чему-то похожему, что верно в вашем случае).

-1

Попробуйте следующий скрипт:

if command ; then
    echo "Command succeeded"
 else
    echo "Command failed"
fi

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .