bashの自己ファイルを消したらどうなるか

はい、ちょっと話題になったので自分でも作ってみました。

test01.sh
#!/bin/sh
echo "start"
sleep 1
rm $0
sleep 1
echo "end"

test02.sh
#!/bin/sh
echo "start"
sleep 1
truncate -s0 "$0"
sleep 1
echo "end"
rm自分バージョンと、trancate自分バージョン。
rmでは自己ファイルを消しますが、バックでまだ残ってるので進みます。
一方、trancateでファイルを0にする感じです。

結果はこちら

[tmp]$ sh test01.sh
start
end

[tmp]$ sh test02.sh
start
[tmp]$
これは教えてもらった事ですが、rm自体はリンクを消すだけだから(よって早い)実態としては残ってる。trancateコマンドはファイルを直接触りに行くから消えると。

参考:
https://www.atmarkit.co.jp/ait/articles/1712/01/news017.html