※解決できません。。解決方法知ってる方がいましたら、教えてください。。。
今までサーバ上で動いていたものがvagrantの仮想環境上で動かないで調べてみましたら、perlのワンライナーでこけてました。
現象としては、perl実行時に以下のエラーになると、
Can't remove ファイル名: テキストファイルがビジー状態です, skipping file.
※LANG Cの場合はこちら
Can't rename ファイル名 to aaa.txt.bak: Text file busy, skipping file.
- 実験
[root@localhost test]# pwd
/vagrant/test
※カレントディレクトリはvagrantのvboxfs配下
[root@localhost test]# echo aaa > aaa.txt
[root@localhost test]# cat aaa.txt
aaa
※ファイルを作成
[root@localhost test]# perl -p -e 's/aaa/bbb/g' aaa.txt
bbb
※perlで文字の置き換え&標準出力(問題なし)
[root@localhost test]# perl -i -p -e 's/aaa/bbb/g' aaa.txt
Can't remove aaa.txt: テキストファイルがビジー状態です, skipping file.
※【-i】追加して、ファイルの置換失敗
[root@localhost test]# perl -p -e 's/aaa/bbb/g' aaa.txt > bbb.txt
[root@localhost test]# ls
aaa.txt bbb.txt
[root@localhost test]# cat bbb.txt
bbb
※標準出力する分には問題なし
[root@localhost test]# rm aaa.txt
rm: remove 通常ファイル `aaa.txt'? y
[root@localhost test]# ls
bbb.txt
[root@localhost test]#
※もちろんパーミッションに問題ないので、元ファイルは消せる
perlで【-i】オプション付けるとエラーでこける
同様にsedだとどうでしょうか?
先ほど作成したbbb.txtを削除して。。。
[root@localhost test]# echo aaa > aaa.txt
[root@localhost test]# cat aaa.txt
aaa
※ファイル作成
[root@localhost test]# sed -e 's/aaa/bbb/g' aaa.txt
bbb
※標準出力で問題なし
[root@localhost test]# sed -i -e 's/aaa/bbb/g' aaa.txt
※置換も特にエラーなし
[root@localhost test]# ls
aaa.txt
[root@localhost test]# cat aaa.txt
bbb
※ファイルの中身が置換されてることが確認
当面はsedで凌ぐか。。。
pythonも同様の現象があり、こちらはパッチがあるっぽいな。。。
https://bugs.python.org/issue25717