bash function - определить, работает ли скрипт или tty - PullRequest
0 голосов
/ 09 июня 2019

Скажем, у меня есть функция bash:

run_stuff(){
   if is_in_script; then
      exit 1
   fi
   return 1;
}

, в основном, если я запускаю ее в сценарии:

$ ./my-script.sh

, тогда я хочу выйти с 1, но если яя запускаю его прямо в терминале:

$ run_stuff

, затем я хочу вернуть 1 (o / w мое окно терминала закроется)

, как лучше всего проверить эту кроссплатформенность

Ответы [ 2 ]

1 голос
/ 09 июня 2019

Вы можете использовать $0.

echo $0 при запуске в моем терминале (bash) возвращает -bash.

echo $0 в сценарии без запуска #!с bash test.sh возвращает test.sh

echo $0 в сценарии с #!/bin/bash, запущенным как ./test.sh, возвращает ./test.sh

0 голосов
/ 09 июня 2019

Это не пуленепробиваемое, но вы можете проверить, является ли текущая оболочка интерактивной:

is_in_script() {
  [[ $- == *i* ]]
}

Однако я бы просто сделал run_stuff всегда return, и если сценарий должен завершиться, когдаКоманда сообщает об ошибке, она может выполнить run_stuff || exit вместо того, чтобы оставить это поведение самой функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...