以下の内容の実行ファイルを作成して実行すると、自身を削除します。
これはどのように作動しますか?
#!/bin/rm
カーネルは#!
で始まる行を解釈し、それを使用してスクリプトを実行し、スクリプトの名前を渡します。これは結局実行されます
/bin/rm scriptname
スクリプトを削除します。 ( StéphaneChazelaspoints out のように、スクリプトを見つけるには、ここでscriptname
で十分です。相対パスまたは絶対パスを指定した場合、そのまま渡されますそうでない場合、PATH
にパスが含まれ、スクリプトが現在のディレクトリにある場合、空の文字列を含め、PATH
で見つかったパスが先頭に追加されます。エコースクリプトで遊ぶことができます— #!/bin/echo
—これがどのように機能するかを確認します。)
hobbs が指摘しているように、これはスクリプトが実際にはrm
スクリプトではなくbash
スクリプトであることを意味します。後者は#!/bin/bash
で始まります。
Linuxでこれがどのように機能するかについての詳細は プログラムの実行方法 を参照してください。その記事のコメントには、他のプラットフォームの詳細が記載されています。 #!
はシバンと呼ばれ、その用語を検索することで多くの情報を見つけることができます(提案のために Aaron に感謝します)。 jlp が指摘したように、「ポンドバン」または「ハッシュバン」と呼ばれることもあります(#
は一般に「ポンド」として知られています— £
—または「ハッシュ」を使用し、!
を「強打」として使用します)。 Wikipedia に詳細があります。