ターミナルはFinderやエディタから削除したフォルダを参照し続けてしまう。
$ mkdir dev-trash
$ cd dev-trash
でdev-trash
をルートとして考えてみる。
ルート直下にfoo
ディレクトリと、以下のファイルhello_generator.rb
を作る
file = File.open("foo/generated_hello.txt", "w") file.puts "hello"
このファイルを実行すると、foo
の下にgenerated_hello.txt
ファイルを生成する。
$ ruby hello_generator.rb
ここで、新しいターミナル2を開いて、generated_hello.txt
を確認してみる。
$ cd dev-trash/foo
$ cat generated_hello.txt
すると、以下のようになる。
hello
ここで、Finderもしくはエディタからfoo
を削除する
foo
は削除したにも関わらず、
$ cat generated_hello.txt
とすると、
hello
が表示される。
次にhello_generator.rb
の内容を変更する。
file = File.open("foo/generated_hello.txt", "w") file.puts "goodbye"
そして実行。
$ ruby hello_generator.rb
ターミナル2から、generated_hello.txt
の内容を確認してみると、
goodbye
になっているはずだが・・・
実際は
hello
のまま。
ファイルのハッシュを調べてみる。
ターミナル2にて。
$ md5 generated_hello.txt
MD5 (generated_hello.txt) = c157a79031e1c40f85931829bc5fc552
ターミナル1からも確認する
$ md5 generated_hello.txt
MD5 (generated_hello.txt) = d92a12b93565fce571081b028e361e01
どうやら、ターミナル1とターミナル2が指している同じパスのファイルは、別のもののようだ。
実際、ターミナル1から確認すると、
$ cat generated_hello.txt
goodbye
と正常に生成されている。
つまり、ターミナル2から参照しているファイルは、生成されたファイルとは別のファイルということになる。
$ pwd
などで調べてみても、パスは同じなので同じファイルじゃないのー!?と困惑したけど、どうやらパスというのは絶対的なものではないらしい。
これはターミナル2がゴミ箱に移動したファイル(フォルダ)を参照し続けていたことが原因だった。
ちなみに、ターミナル2から
$ cd ../foo
$ cat generated_hello.txt
とすると、
goodbye
と正常なファイルが参照し直される。
$ rm
コマンドを使用すると、ゴミ箱に行かずに削除されるから、そもそも参照ができないので、ファイルがなければエラー、あれば新しいファイルが自動的に参照されるみたいだ。