LoginSignup
0
2

More than 5 years have passed since last update.

CLIにおける無邪気なワイルドカード使用の恐怖

Posted at

背景

Shell Style Guideを読んでいたらワイルドカードについて書いてあった。そこで初めて知ったことがあったので自己の戒めを兼ねて書く。

概要

Shell Style Guideによるとファイル名は-から始められるから*ではなく./*の方が安全と書いてある。検証してみる。検証環境はbash-3.2。

検証

まずテキストファイルa.txtとディレクトリa_dirを作成して$ rm *コマンドを実行する。するとa.txtは削除されるが、a_dirrm: a_dir/: is a directoryと出て削除できない。ここまでは納得。
次にファイル-f-ra.txt、ディレクトリa_dirを作成する。ここでも$ rm a_dirコマンドはrm: a_dir/: is a directoryと出る。さて、ここで*コマンドを実行してみる。すると…
スクリーンショット 2018-11-25 12.09.55.png
本来消えるはずのないディレクトリa_dirが削除されてしまっている。念のためechoコマンドで確かめてみる。
スクリーンショット 2018-11-25 12.10.47.png

考察

ワイルドカードは当該ディレクトリ内のファイルおよびディレクトリを全て展開しているだけだった。そのため、-f-rファイルがオプションとして解釈されてしまっていた。-rはディレクトリも削除対象に含むオプションであり、これによってa_dirも削除対象となっていた。
「そんなシチュエーションないだろ」という考えもあると思うが、複雑なバッチ処理の最中にこれに似た処理が走る可能性もあるかもしれない。その際もしも何らかの原因でエラーが発生したとしても-fオプションによってエラーメッセージが出力されないため、原因の特定は困難になる。そもそも可能性が考えられる時点で安全な./*を用いるべきなのだろう。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2