概要
実行するとスクリプトファイル自身が肥大化していくシェルスクリプトです。
実用的なものではなく、遊びです。
実行すると肥大化していくバッチファイルの
Unix/Linuxコマンド版です。
環境
Ubuntu 20.10 on Windows Subsystem for Linux (WSL2)
macOS 11.1 BIg Sur
コード
bomb.sh
cat $0 $0>$0_
cat $0_>$0
上記で動かない場合は、下記の3行版で試してください。
bomb.sh
cat $0 $0>$0_
cat $0_>$0
sh $0
解説
- スクリプトファイルのコマンド行数は2行となっています。
- 1行目はCATコマンドにて、自身の中身を中間ファイルに2個分上書きしています。
※元ファイルの名前が "bomb.sh" ならば、中間ファイルは "bomb.sh_" になります。 - 2行目は中間ファイルの中身を元のファイルに上書きしています。
- メカニズムがまだ解っていないのですが、
2行目のコマンド実行終了後も上書きされたファイル内のコマンドが読み出されてしまうのか、処理が延々と続きます。 - スクリプトファイルのサイズが、2倍、4倍、8倍... と1サイクルにつき2倍になります。
※シェルや文字コードによっては、綺麗な2倍ずつにはならない場合があります。 - 大容量のUSBメモリ、SDカード、SSDなどNAND型フラッシュメモリのストレージ上で実行する場合にはご注意下さい。
ファイルを上書きしていく仕様のため、一度データを書き込んだ領域が再び空き領域になります。
これは、ウェアレベリング(書き込み位置が分散されるよう制御する技術)が巧く働かない場合にP/Eサイクルを早め、故障する(書き込み不可になる)虞がある事を意味します。