Выход вызывает root-выход из системы, если пользователь скрипта выполняет скрипт вне директории скрипта - PullRequest
0 голосов
/ 12 апреля 2019

Пользователь ошибки Bash Script выходит из-под рута при выходе

У меня есть большой сценарий Bash, который требует выйти из сценария и перезапустить его, если какой-либо пользовательский ввод недопустим.Я получил странную ошибку, когда пользователь выполняет скрипт за пределами каталога, в котором он находится, он выходит из root.Но если скрипт выполняется внутри каталога, в котором он находится, этого не происходит.

Я уже пытался удалить выход, но это только ухудшает ситуацию.

#!/bin/bash

some_function() {

      read -p "Enter something: "

      # Some commands

      if [[ $? -gt 0 ]]; then
            echo "error"
            . /whatever/location/script.sh && exit 1
      fi

}

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

1 Ответ

0 голосов
/ 12 апреля 2019

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

Для сценария, который всегда получен, используйте return вместо exit

Если вы не знаете, будет ли сценарий получен или нет, вам нужно будет определить его и выбрать правильное поведение в зависимости от того, как он был вызван. Например:

some_function() {
  read -p "Enter something: "
  # Some commands
  if [[ $? -gt 0 ]]; then
      echo "error"
      if [[ "${BASH_SOURCE[0]}" != "${0}" ]]; then
        # sourced
        . /whatever/location/script.sh && return 1
      else
        # not sourced
        . /whatever/location/script.sh && exit 1
      fi
  fi
}
...