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

Предположим, что кто-то вызывает несуществующую команду, единственный способ, которым я знаю, восстановить его статус ошибки из сценария, который я выполняю сразу после, используя 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 или . ?

  • переменная curl outfile не работает в скрипте bash
  • Сед найти и заменить косой чертой
  • Объединить файлы с двумя столбцами в один файл
  • Как активировать Virtualenv при запуске скрипта Python?
  • вставить значение в конце каждой записи на основе уникальных идентификаторов
  • Согласование и сохранение и возврат информации на стандартный ввод
  • Shell Scripting: как использовать часть пути к файлу в качестве имени файла?
  • Unix Shell: назначение массива не работает
  • 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

    переопределить сеанс для пользователя (без списка пользователей)

    Рекомендации по резервному копированию ZFS с другим сервером

    Максимальные клиенты с точкой доступа USB

    Пользователь не может войти в каталог, хотя разрешения 777

    Есть ли способ поиска в строке меню в Gnome?

    Архивировать диски проверки при загрузке

    команда status не распознает параметр `-p` в Ubuntu

    Где можно установить локальное программное обеспечение, которое работает до / usr?

    Отображение файла в другом файле

    Нарисуйте сегменты из заданных точек

    Могу ли я узнать, какой ключ ssh использовался для доступа к учетной записи?

    Получить рекурсивный счетчик файлов (например, `du`, но количество файлов вместо размера)

    В чем разница между dmesg и journalctl

    Как написать столбец последовательных целых чисел в Vim над существующим текстом?

    Почему «ESC» перемещает курсор обратно в vim?

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