build が無いとカレントのファイルが消える。このスクリプトへの指摘として正しいものは?
#!/bin/bash# 古いビルド成果物を消して作り直すcd build ; rm -rf *mkdir -p outmake正答
rm -rf *は . で始まるファイルも含めて上の階層まで消すので、* を ./* に変えるべきです。- ; は cd が失敗しても
rm -rf *を実行します。cd build && rm -rf *にすべきです。 mkdir -p outは out が既にあるとエラーで止まるので、-p を外すべきです。rm -rf *は確認を求めるので入力待ちで止まります。-f を外すべきです。
解説
; はコマンドを順に実行するだけで、左が失敗しても右を実行する。build が無いと cd は失敗するが rm -rf * はそのまま動き、スクリプトを実行したディレクトリの中身を消してしまう。&& なら左が成功したときだけ右を実行するので、cd に失敗した時点で止まる。* は . で始まるファイルに一致せず上の階層も消さないので、* を ./* にしても解決しない。-f は確認を出さない指定で、外すと逆に確認が出る。
参考: www.gnu.org
この問題を含む Linux・シェル のテストを制限時間つきで解く
Linux・シェルクイズへ