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

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

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, это должно быть доступно и работать, как вы ожидаете.

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

  • есть ли команда «goto» в ksh
  • удаление данных из txt-файла
  • Как мне запустить команду в другом tty?
  • Как получить сервис, который гарантирует, что программа будет работать?
  • как удаленно выполнять сценарий оболочки с повышенными привилегиями
  • Как я могу переключиться с одного пользователя на другого пользователя внутри сценария?
  • Простой, но правильный способ иметь сценарий bash отправлять вывод в журнал systemd?
  • Для того, чтобы цикл не выполнялся корректно поверх ssh
  • Измените определенную часть файла с помощью сценария оболочки
  • Вставить в таблицу Oracle в цикле
  • Правильное литье типов в сценарии оболочки для использования с циклом while и модулем
  • убедитесь, что все строки в текстовых файлах не имеют одинакового значения
  • Linux и Unix - лучшая ОС в мире.