Если вы создадите исполняемый файл со следующим содержимым и запустите его, он удалит сам себя.
Как это работает?
#!/bin/rm
shell-script
files
rm
executable
shebang
user253751
источник
источник
rm
, это о#!
. Вопрос можно перефразировать, как работает любой исполняемый скрипт с#!
работающим.Ответы:
Ядро интерпретирует строку, начинающуюся с,
#!
и использует ее для запуска скрипта, передавая имя скрипта; так что это в конечном итоге работаеткоторый удаляет скрипт. (Как указывает Стефан Шазелас , здесь достаточно найти сценарий - если вы указали относительный или абсолютный путь, он передается как есть, в противном случае любой путь, в котором был найден, будет добавлен, включая, возможно, строку emptry, если ваш содержит это и скрипт находится в текущем каталоге. Вы можете поиграться с эхо-скриптом -, чтобы увидеть, как это работает.)
scriptname
PATH
PATH
#!/bin/echo
Как указал Хоббс , это означает, что ваш скрипт на самом деле является
rm
скриптом, а неbash
скриптом - последний будет начинаться с#!/bin/bash
.Посмотрите, как программы запускаются для деталей о том, как это работает в Linux; комментарии к этой статье дают подробности для других платформ.
#!
называется шебанг, вы найдете много информации, выполнив поиск по этому термину (спасибо Аарону за предложение). Как указал jlp , вы также найдете его упоминаемым как «фунт взрыв» или «хэш-взрыв» (#
обычно известный как «фунт» - в странах, которые не используют£
- или «хэш», и!
как «взрыв») ). Википедия имеет больше информации.источник
rm
будет путь к скрипту, то есть первый аргумент системного вызова execve (), сделанного процессом. Как правило, если вы запустили скрипт как./scriptname
, это будет,./scriptname
и если вы вызвали его какscriptname
, это будет/path/to/scriptname
где/path/to
находится запись,$PATH
где этот скрипт был найден. Как правило, это происходит только в томscriptname
случае, если у вас есть пустая строка,$PATH
и вы вызвали скрипт какscriptname
иscriptname
есть в текущем каталоге.