Якщо створити виконуваний файл із наступним вмістом і запустити його, він видалиться сам.
Як це працює?
#!/bin/rm
rm, це про #!. Питання може бути переосмислено, як працює будь-який виконуваний сценарій із #!твором.
Якщо створити виконуваний файл із наступним вмістом і запустити його, він видалиться сам.
Як це працює?
#!/bin/rm
rm, це про #!. Питання може бути переосмислено, як працює будь-який виконуваний сценарій із #!твором.
Відповіді:
Ядро інтерпретує рядок, починаючи з #!і використовує його для запуску сценарію, передаючи ім'я сценарію; так що це закінчується
/bin/rm scriptname
який видаляє сценарій. (Як вказує Стефан Шазелас , тут достатньо, щоб знайти сценарій - якщо ви вказали відносний або абсолютний шлях, це пройдено як є, інакше будь-який шлях, який був знайдений, є попереднім, включаючи, можливо, рядок порожніх, якщо ваш містить це і сценарій знаходиться в поточному каталозі. Можна пограти за допомогою ехо-скрипту - - щоб побачити, як це працює.)scriptnamePATHPATH#!/bin/echo
Як зазначав Хоббс , це означає, що ваш сценарій насправді є rmсценарієм, а не bashсценарієм - останній почав би з цього #!/bin/bash.
Див. Як Запуск програм для отримання детальної інформації про те, як це працює в Linux; коментарі до цієї статті дають детальну інформацію про інші платформи. #!називається shebang, ви знайдете багато інформації, шукаючи цей термін (спасибі Аарону за пропозицію). Як вказував jlp , ви також знайдете його як "фунт баг" або "хеш баг" ( #загальновідомий як "фунт" - у країнах, які не використовують £- або "хеш", і !як "удар") ). У Вікіпедії є додаткова інформація.
rmбуде шлях до сценарію, тобто перший аргумент до системного виклику execve (), здійсненого процесом. Як правило, якщо ви запустили сценарій як ./scriptname, такий буде, ./scriptnameі якщо ви посилаєтесь на нього як scriptname, це буде /path/to/scriptnameде /path/toзаписом, $PATHде цей скрипт був знайдений. Як правило, це буде лише в тому scriptnameвипадку, якщо у вас є порожня рядок $PATHі ви викликали сценарій як scriptnameі scriptnameє в поточному каталозі.