Статус последнего выхода из скрипта без источника

Предположим, что кто-то вызывает несуществующую команду, единственный способ, которым я знаю, восстановить его статус ошибки из сценария, который я выполняю сразу после, используя source

То есть, допустим, имя этого сценария является dummy где его содержимое просто

 #!/bin/bash echo $? 

Я знаю, что я получу только статус выхода, который я ищу (127), если я вызываю source dummy , но есть ли другой способ облегчить получение статуса выхода (предпочтительно без использования alias ) из последней команды из сценария, без используя source чтобы я мог просто вызвать dummy чтобы добиться желаемого поведения?

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

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

 #!/bin/bash ESTATUS=$? # Saved exit status for later echo $ESTATUS 

но для этого потребовалось запустить этот сценарий с source . Есть ли хороший способ воспроизвести это без использования source или . ?

  • Проверить количество слов в файле, содержащем конкретную букву
  • Замените что-либо между круглыми скобками, даже если они охватывают несколько строк
  • Как мне сохранить параметры команды от нарушения других сценариев, выполняемых в моей команде?
  • Некоторые символы исчезают после обработки текстового файла
  • Задачи автоматизации для системных администраторов
  • Как настроить скрипт для выполнения, когда порт получает сообщение
  • Point и нажмите Ubuntu 16.04 bash-скрипт случайным образом изменяет поведение вывода
  • Как заменить все первые вхождения в совпадающие строки с инкрементным числом?
  • 4 Solutions collect form web for “Статус последнего выхода из скрипта без источника”

    Я не совсем уверен, к чему это приведет, но вы можете сделать:

     alias dummy='sh dummy $?' the_program_with_errors dummy 

    и ваш dummy скрипт будет содержать:

     echo $1 

    Подход без alias заключается в использовании функции оболочки:

     function dummy { sh dummy $? ;} 

    С помощью этого определения вы можете получить следующее поведение (имитированное с помощью метода true , false и subhell):

     $ true $ dummy 0 $ false $ dummy 1 $ (exit 42) $ dummy 42 

    Возможно, вы можете использовать этот скрипт на странице https://github.com/rcaloras/bash-preexec (как описано в https://superuser.com/questions/175799/does-bash-have-a-hook-that-is- run-before-executing-a-command ) и использовать функцию precmd () для выполнения ваших $? проверка

    Мне кажется, что сценарии, которые вы вызываете, должны предоставлять ответы, которые вы желаете. Ниже приведен пример проверки команды и использования определенного кода выхода в этих сценариях.

     #!/bin/bash # Test for the existence of a command in the path. command=typo_command if [[ ! $(command -v $command) ]]; then echo "$command does not exist" exit 127 # or the code you choose fi 

    Напишите функцию

    Ваша оболочка – это один процесс и имеет значение для $? , Ваш скрипт является отдельным дочерним процессом и имеет собственное значение для $? ,

    Если вы хотите проверить $? принадлежащий вашей оболочке, вам нужна ваша команда для запуска в процессе оболочки. source – это один из способов сделать это, но более простой способ – написать функцию.

     function dummy(){ echo $? } 

    Если объявлено в пользовательском .bashrc или equivilant, это должно быть доступно и работать, как вы ожидаете.

    (Если вы хотите, он может даже вызвать скрипт, чтобы делать все, что вам нужно, и передать скрипту значение $? ).

    Interesting Posts

    Как создать драйверы звуковых карт?

    Как ответить YES автоматически командой cryptsetup luksFormat?

    Как проверить, использует ли приложение память моей видеокарты?

    Задача Cron не запускается после команды в crontab

    Как отредактировать / удалить .dot_file на Mac без использования терминала

    Найдите любые линии, превышающие определенную длину

    Как добавить имя, дату и размер жесткого диска

    Debian недоступен через свое имя хоста в локальной сети

    Как заставить команды выделяться жирным шрифтом в zsh?

    Какой cmd лучше всего подходит для определения размера слова OS (32/64) -бита?

    Почему я должен постоянно отключать и подключаться к Интернету?

    Параллельный запуск функций

    Почему ext4 рекомендуется только до 16 ТБ?

    Как оценить качество сетевого подключения сервера с помощью traceroute?

    Почему стоит останавливаться на «Makefile: 6: *** несколько целевых шаблонов. Стоп."?

    Linux и Unix - лучшая ОС в мире.