done is better than perfect

自分が学んだことや、作成したプログラムの記事を書きます。

rm -fをした場合のexit-statusについて

bashにおいて、rmコマンドを使った場合のexit statusについてです。初歩的なことだとは思いますが、自分への備忘録。

結論を先に書くと、rm $PATH_TO_FILEをした時に$PATH_TO_FILEが元々存在しない場合、-fオプションがない場合はexit statusが1となり、-fオプションがある場合は0となるので気をつけましょうということです。

~/dev/tmp$ ls                                                                                   
~/dev/tmp$ rm testfile                                                                          
rm cannot remove ‘testfile’ No such file or directory                                           
~/dev/tmp$ echo $?                                                                              
1                                                                                               
~/dev/tmp$ rm -f testfile                                                                       
~/dev/tmp$ echo $?                                                                              
0

ちなみに、permission deniedなど他のエラーに関してはオプション関係なくexit statusは1になるっぽいです。

~/dev/tmp$ rm testdir/                                                                          
rm: cannot remove ‘testdir/’: Is a directory                                                    
~/dev/tmp$ echo $?                                                                              
1                                                                                               
~/dev/tmp$ rm -f testdir/                                                                       
rm: cannot remove ‘testdir/’: Is a directory                                                    
~/dev/tmp$ echo $?                                                                              
1                                                                                               
~/dev/tmp$ rm /initrd.img                                                                       
rm: cannot remove ‘/initrd.img’: Permission denied                                              
~/dev/tmp$ echo $?                                                                              
1                                                                                               
~/dev/tmp$ rm -f /initrd.img                                                                    
rm: cannot remove ‘/initrd.img’: Permission denied                                              
~/dev/tmp$ echo $?                                                                              
1