問題ID: 7686 (rm ./* 2> rm.log)について*/

  • フォーラムは新サイトへ移行しました。
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2012-7-3 15:24 | 最終変更
hijikata11  新米   投稿数: 3
該当の問題ですが、カレントディレクトリ内の全てのファイルを削除しているので、カレントディレクトリに
rm.log というファイルを出力しても、(エラーが出るタイミングにもよりますが)rm.log 自体も削除される為
適切なコマンドとは言えないと思います。
(ファイルが消されてしまうので、標準エラー出力を記録するという目的が達成されていない)

カレントディレクトリが /tmp 以外であるという前提の下、/tmp/rm.log に出力する、というような内容に
すれば良いのではないでしょうか。
実業務でも初心者にありがちなミスなので、正しい形にすべきと思います。

また、rm コマンドが rm -i のエイリアスとなっている場合、上記コマンドが正常に動かないという問題も
ありますが、ここでは考えない、という注意書きがあれば良いと思いました。

以上
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2012-7-3 19:13
librabochi  新米   投稿数: 1
hijikata11さん、横から済みません。1つ教えて下さい。

アスタリスクはシェルによってまず展開され、それがrmコマンドに渡されると思います。

例えばカレントディレクトにa,b,cという3ファイルがある場合
rm *

rm a b c

a,b,cがrmコマンドに渡された後、アスタリスクはリアルタイムで監視を続け、新たにdというファイルが作成されればdもrmコマンドに渡す、という動きをするという事でしょうか。

この問題の場合、rm.logが作成されるのは既にアスタリスクが展開されて、カレントディレクトリの内容がrmコマンドに渡された後だと思うので、上記のように思いました。

認識が違っていたら済みませんが教えて頂ければ幸いです。
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2012-7-23 1:14 | 最終変更
ゲスト    投稿数: 0
メタキャラクタ展開よりリダイレクトの処理が先です。

…と思っていたのですが、今試してみると bash だと
メタキャラクタ展開の方が先なんですね (bash-3.2.25 で確認)。
よって、bash だと、rm.log が残ります。ただしすでに
rm.log が存在していた場合は rm.log が残りません。

ちなみに tcsh だとリダイレクトが先でした
(tcsh-6.14.00 で確認)。tcsh だと "2>" がないですが、
rm * > rm.log
だと rm.log は残りません。

LPIC だし、"2>" と書いている時点で sh 系だし、
まぁいいのかもしれませんが、良問とは言えないかと思います。

  >フォーラム検索へ


Copyright (c) 2020 Ping-t All rights reserved.