Linux・シェル4 択難易度 応用

build が無いとカレントのファイルが消える。このスクリプトへの指摘として正しいものは?

#!/bin/bash# 古いビルド成果物を消して作り直すcd build ; rm -rf *mkdir -p outmake

正答

  1. rm -rf * は . で始まるファイルも含めて上の階層まで消すので、* を ./* に変えるべきです。
  2. ; は cd が失敗しても rm -rf * を実行します。cd build && rm -rf * にすべきです。
  3. mkdir -p out は out が既にあるとエラーで止まるので、-p を外すべきです。
  4. rm -rf * は確認を求めるので入力待ちで止まります。-f を外すべきです。

解説

; はコマンドを順に実行するだけで、左が失敗しても右を実行する。build が無いと cd は失敗するが rm -rf * はそのまま動き、スクリプトを実行したディレクトリの中身を消してしまう。&& なら左が成功したときだけ右を実行するので、cd に失敗した時点で止まる。* は . で始まるファイルに一致せず上の階層も消さないので、* を ./* にしても解決しない。-f は確認を出さない指定で、外すと逆に確認が出る。

参考: www.gnu.org

list-operatorrmcd

この問題を含む Linux・シェル のテストを制限時間つきで解く

Linux・シェルクイズへ