1

見たいmydirectory/

私はそれを作成inot.shし、バックグラウンドで実行しました# ./inot.sh &

inot.shこれが私が試したスクリプトの最初のバージョンです:

#!/bin/bash    

inotifywait -m -e create,modify --exclude '\*.swp?$' . |
while read dir ev file; do
        cp "$file" inotfiles/"$file"
done

注:excludeパターンはvimスワップファイルを除外することになっていますが、まだ機能していないようです。

ファイルが作成(または変更)された場合は、ファイル全体をストレージフォルダーにコピーします。create,modify今のところ、私は何かを正しく動作させることができるかどうかを確認することに焦点を当てています。

この時点で、FTPアップロードは正しく機能しているようです。コマンドラインを使用しtouchてファイルに、空のファイルをコピーします。しかし、それをvim編集するために使用すると、多くの問題が発生します。

vimで既存のファイルを編集しましたが、変更しませんでした。ファイルを入力すると、次のようになります。

cp: cannot stat `.zzzzzoo.txt.swx': No such file or directory
~
~
~
~
~

最初の行はファイルの一部のように見えますが、そうではありません。これは、vimビューアに干渉するinotifyです。終了すると、すべてが正常に見えます。

しかしcp、vimの終了時に同じエラーメッセージが表示されることがあります。

ファイルを編集してファイルへの書き込みを終了すると、次のようになります。

vimを終了すると、次のようになります。

~
~
~
~
~
~
"zzzzzoo.txt" cp: cannot stat `4913': No such file or directory
"zzzzzoo.txt" 1L, 11C written
[root@server mydirectory]# cp: cannot stat `.zzzzzoo.txt.swp': No such file or direc
tory

チルダの最初の部分はvimからです。

"somefile.txt" cp: cannot stat `4913': No such file or directory
"somefile.txt" 7L, 129C written

編集:私が言及するのを忘れているもう1つのエラーを追加する

コピーしたファイルをvimで開くと、vimが同じファイル名のスワップファイルを見つけたという通知が表示されます。

E325: ATTENTION
Found a swap file by the name "inotfiles/.somefile.txt.swp"

などなど。

Swap file "inotfiles/.somefile.txt.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:

//編集されたセクションを終了します

したがって、vimスワップファイルを適切に除外することでこの問題を修正できる可能性があることはわかっていますが、より大きな質問は「なぜcpエラーがstdoutになるのか、そしてそれらを停止する方法」であるように思われます。おそらくどこか別の場所にパイプする必要があります。

また、無限のwhileループを防ぐ方法も必要です。そのセクションを書く他の方法はありますか?

4

1 に答える 1

1

のスワップ ファイルinotifywaitに気を付けるように頼む代わりに、一時ファイルをより適切な (邪魔にならない) 場所に配置してみませんか。vimvim

たとえば、次のようにします。

mkdir -p ~/tmp/.vim

そして、あなたの.vimrc

set backupdir^=~/tmp/.vim/
set directory^=~/tmp/.vim/

http://vim.wikia.com/wiki/Remove_swap_and_backup_files_from_your_working_directory

考えてみてください:スワップファイルを除外するように正規表現を取得した場合、emacsユーザーがあなたに参加し、同じディレクトリ内のファイルを編集するために使用したい場合emacs、気が付く前に正規表現の混乱が発生します!

于 2012-11-28T13:15:09.467 に答える