Вы уверенно движетесь к новой жизни автора shell-скриптов! Однако до сих пор Ваши скрипты запускались только из оболочки. На предыдущем уровне всё работало отлично (поскольку Вы запускали скрипт из оболочки bash), но это не сработает, если скрипт вызывается, например, программой на Python (или на любом другом языке).
На момент запуска программы ядро Linux сначала изучает файл, чтобы определить, как его следует выполнить. При этом расширение файла НЕ используется (именно поэтому у shell-скриптов не обязательно должно быть расширение .sh, у Python-скриптов — .py и т. д.). Вместо этого Linux смотрит на первые несколько байт файла.
Существует множество типов программ, но если файл начинается с символов #! (часто называемых «шебангом»), Linux считает файл интерпретируемой программой, а остаток строки — путём к интерпретатору. Ядро запускает интерпретатор, передавая путь к файлу программы единственным аргументом.
Рассмотрим shell-скрипт script.sh:
#!/bin/bash
echo "Привет, хакеры!"
Его можно выполнить так:
hacker@chain:~$ chmod a+x script.sh
hacker@chain:~$ ./script.sh
Привет, хакеры!
hacker@chain:~$
При выполнении ./script.sh Linux открыл файл, прочитал первую строку, извлёк из неё /bin/bash в качестве интерпретатора и выполнил /bin/bash ./script.sh для запуска скрипта!
Обратите внимание: строка шебанга должна быть САМОЙ ПЕРВОЙ строкой файла — перед ней не должно быть ни пустых строк, ни пробелов!
Часто встречающиеся шебанги:
#!/bin/bash — для bash-скриптов
#!/usr/bin/python3 — для Python-скриптов
#!/bin/sh — для скриптов POSIX shell --- это более примитивный предшественник bash с меньшим числом функций, но большей совместимостью с не-Linux системами!
В этом задании создайте скрипт по пути /home/hacker/solve.sh с шебангом для bash-скриптов, который выводит строку «hack the planet». Не забудьте сделать его исполняемым, а затем запустите /challenge/run, чтобы проверить работу скрипта!