Bash Script: что означает #!/bin/Bash означает?

В bash script, что означает #!/bin/bash в первой строке?

UPDATE: существует ли разница между #!/bin/bash и #!/bin/sh?

Ответ 1

Это называется shebang, он сообщает оболочке, какая программа интерпретирует script с, когда выполняется.

В вашем примере script должен интерпретироваться и запускаться оболочкой bash.

Некоторые другие примеры shebangs:

(Из Википедии)

#!/bin/sh — Execute the file using sh, the Bourne shell, or a compatible shell
#!/bin/csh — Execute the file using csh, the C shell, or a compatible shell
#!/usr/bin/perl -T — Execute using Perl with the option for taint checks
#!/usr/bin/php — Execute the file using the PHP command line interpreter
#!/usr/bin/python -O — Execute using Python with optimizations to code
#!/usr/bin/ruby — Execute using Ruby

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

#!/bin/ksh
#!/bin/awk
#!/bin/expect

В script с bash shebang, например, вы должны написать свой код с синтаксисом bash; в то время как в script с ожидаемым shebang вы бы закодировали его в ожидании синтаксиса и т.д.

Ответ на обновленную часть:

Это зависит от того, что /bin/sh на самом деле указывает на вашу систему. Часто это всего лишь символическая ссылка на /bin/bash. Иногда переносимые скрипты записываются с помощью #!/bin/sh только для обозначения того, что это оболочка script, но она использует ту оболочку, на которую ссылается /bin/sh на этой конкретной системе (возможно, она указывает на /bin/bash, /bin/ksh или /bin/zsh)

Ответ 2

В bash script что означает #!/bin/bash в первой строке?

В системе Linux у нас есть оболочка, которая интерпретирует наши команды UNIX. Теперь в системе Unix есть несколько оболочек. Среди них есть оболочка под названием bash, которая очень распространена в Linux и имеет долгую историю. Это оболочка по умолчанию в Linux.

Когда вы пишете script (сборник команд unix и т.д.), вы можете указать, какую оболочку он может использовать. Как правило, вы можете указать, какую оболочку он будет использовать, используя Shebang (Да, что это имя).

Итак, если вы #!/bin/ bash в верхней части ваших скриптов, то вы сообщаете вашей системе использовать bash как оболочку по умолчанию.

Теперь, перейдя к вашему второму вопросу: есть ли разница между #!/bin/ bash и #!/bin/sh?

Ответ: Да. Когда вы укажете #!/Bin/ bash, вы сообщаете своей среде /os использовать bash в качестве интерпретатора команд. Это жестко закодированная вещь.

Каждая система имеет свою собственную оболочку, которую система будет использовать для выполнения собственных системных скриптов. Эта системная оболочка может отличаться от ОС к ОС (большую часть времени она будет bash. Ubuntu недавно использует dash в качестве системы по умолчанию оболочка). Когда вы укажете #!/Bin/sh, система будет использовать внутреннюю системную оболочку для интерпретации сценариев оболочки.

Посетите эту ссылку для получения дополнительной информации, где я объяснил эту тему.

Надеюсь, это устранит ваши недоумения... удачи.

Ответ 3

Когда первые символы в script равны #!, это называется shebang. Если файл начинается с #!/path/to/something стандартом является запуск something и передача остальной части файла в эту программу в качестве ввода.

С учетом сказанного разница между #!/bin/bash, #!/bin/sh или даже #!/bin/zsh заключается в том, используются ли программы bash, sh или zsh для интерпретации остальной части файла. bash и sh - это просто разные программы, традиционно. На некоторых системах Linux они представляют собой две копии одной и той же программы. В других системах Linux sh - это ссылка на dash, а на традиционных Unix-системах (Solaris, Irix и т.д.) bash обычно представляет собой совершенно другую программу из sh.

Конечно, остальная часть линии не должна заканчиваться ш. Это может быть также #!/usr/bin/python, #!/usr/bin/perl или даже #!/usr/local/bin/my_own_scripting_language.