2015-04-02 5 views
2

Я вызов редактора Vim из PERL программы таким образом:Как определить, был ли файл изменен при выходе из vim?

my $cmd = "vi myfile"; 
system($cmd); 

Тогда я хотел бы выполнять различные действия в зависимости от того файла был изменен или нет:

if(myfile was modified) { 
    doAction1; 
} 
else { 
    doAction2; 
} 

Как проверить если файл был изменен или нет? Я искал коды выхода vim, но не нашел ничего полезного.

+0

Hi @stanwar: Если a ny answer решил ваш вопрос, пожалуйста, рассмотрите [его принятие] (http://meta.stackexchange.com/q/5234/179419), нажав галочку. Это указывает более широкому сообществу, что вы нашли решение и дали некоторую репутацию как самому, так и самому себе. Это не обязательно. –

ответ

0

сделать скрипт, который вводит файл TMP:

MYTMP=/tmp/perltimestamp.$$ 
file=myfile 
touch ${MYTMP} 
vi ${file} 
if [ $(find . -name ${file} -newer ${MYTMP} | wc -l) -gt 0 ]; then 
    rm ${MYTMP} 
    doAction1 
} else { 
    rm ${MYTMP} 
    doAction2; 
} 

Конечно, вы можете переместить команду гт вне если-то-иначе, когда ваши doActions быстро и безопасно.

3

Простой способ проверить файл mtime:

my $old_mtime = (stat $file)[9]; 
system('vi', $file); 
if ((stat $file)[9] != $old_mtime) { 
    # file modified 
} 
0

File::Modified module инкапсулирует MD5 и время изменения проверки (предпочитающие MD5, если File::MD5 установлен):

use File::Modified; 
my $detector = File::Modified->new(files=>[$filename]); 
# [run the editor] 
if($detector->changed) { # [...] 

Вот полный пример:

#!/usr/bin/perl 

use File::Modified; 

my $filename = 'myfile'; 
my $detector = File::Modified->new(files=>[$filename]); 

my $cmd = "vi $filename"; 
system $cmd; 

if($detector->changed) { 
    print "modified\n"; 
} else { 
    print "the same\n"; 
} 
Смежные вопросы