5
4

More than 5 years have passed since last update.

vagrantのvboxsf上でperlのワンライナーがtext busyになる現象

Posted at

※解決できません。。解決方法知ってる方がいましたら、教えてください。。。

今までサーバ上で動いていたものが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

5
4
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4