В bash script, что означает #!/bin/bash
в первой строке?
UPDATE: существует ли разница между #!/bin/bash
и #!/bin/sh
?
В bash script, что означает #!/bin/bash
в первой строке?
UPDATE: существует ли разница между #!/bin/bash
и #!/bin/sh
?
Это называется 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
)
В 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, система будет использовать внутреннюю системную оболочку для интерпретации сценариев оболочки.
Посетите эту ссылку для получения дополнительной информации, где я объяснил эту тему.
Надеюсь, это устранит ваши недоумения... удачи.
Когда первые символы в 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
.