web-dev-qa-db-ja.com

次のスクリプトはなぜそれ自体を削除するのですか?

以下の内容の実行ファイルを作成して実行すると、自身を削除します。
これはどのように作動しますか?

#!/bin/rm
84
user253751

カーネルは#!で始まる行を解釈し、それを使用してスクリプトを実行し、スクリプトの名前を渡します。これは結局実行されます

/bin/rm scriptname

スクリプトを削除します。 ( StéphaneChazelaspoints out のように、スクリプトを見つけるには、ここでscriptnameで十分です。相対パスまたは絶対パスを指定した場合、そのまま渡されますそうでない場合、PATHにパスが含まれ、スクリプトが現在のディレクトリにある場合、空の文字列を含め、PATHで見つかったパスが先頭に追加されます。エコースクリプトで遊ぶことができます— #!/bin/echo —これがどのように機能するかを確認します。)

hobbs が指摘しているように、これはスクリプトが実際にはrmスクリプトではなくbashスクリプトであることを意味します。後者は#!/bin/bashで始まります。

Linuxでこれがどのように機能するかについての詳細は プログラムの実行方法 を参照してください。その記事のコメントには、他のプラットフォームの詳細が記載されています。 #!はシバンと呼ばれ、その用語を検索することで多くの情報を見つけることができます(提案のために Aaron に感謝します)。 jlp が指摘したように、「ポンドバン」または「ハッシュバン」と呼ばれることもあります(#は一般に「ポンド」として知られています— £ —または「ハッシュ」を使用し、!を「強打」として使用します)。 Wikipedia に詳細があります。

112
Stephen Kitt