32

У меня есть несколько скриптов bash, которые я в основном использую

#!/bin/bash

но я регулярно сталкиваюсь с некоторыми, которые похожи

#!/bin/bash -e
#!/bin/bash -x
#!/bin/bash -ex

и так далее.

Может ли кто-то объяснить значение и преимущества этих вариантов Шебанга и применимы ли они к другим Шебангу?

2 ответа2

39

Если скрипт /path/to/foo начинается с #!/bin/bash , затем выполнение /path/to/foo arg1 arg2 эквивалентно выполнению /bin/bash /path/too/foo arg1 arg2 . Если линия Шебанга #!/bin/bash -ex , это эквивалентно выполнению /bin/bash -ex /path/too/foo arg1 arg2 . Эта функция управляется ядром.

Обратите внимание, что вы можете переносить только один аргумент в строке shebang: некоторые юниты (например, Linux) принимают только один аргумент, так что #!/bin/bash -e -x приведет к тому, что bash получит единственный пятисимвольный аргумент -e -x (синтаксическая ошибка), а не два аргумента -e и -x .

Для оболочки Bourne sh и производных оболочек, таких как POSIX sh, bash, ksh и zsh:

  • -e означает, что в случае сбоя какой-либо команды (на что указывает возвращаемое ненулевое состояние) сценарий будет немедленно завершен.
  • -x заставляет оболочку печатать трассировку выполнения.

Другие программы могут понимать эти параметры, но с другими значениями.

22

Это параметры, передаваемые bash см. help set для получения дополнительной информации, в этом случае:

-x  Print commands and their arguments as they are executed.
-e  Exit immediately if a command exits with a non-zero status.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .