如何退出在Perl脚本执行期间运行的vi会话?

时间:2012-02-20 09:31:21

标签: perl system exec vi interactive

我必须做很少的工作。运行每个作业后,它会对内容运行vi。写完和退出后(通常我做:wq!)这些数据在数据库中得到更新。由于这些工作的数量超过一百,我想到了使用Perl自动化这个过程。

但是当我运行脚本时,我陷入了vi,无法让它自行退出。这需要手动干预,并且不符合我的脚本的目的。我需要有关如何处理这种情况的帮助,因为它将帮助我节省时间和精力。

代码如下:

print "Enter job name - \n";
$job_rc = <>;
print "Job entered by you is $job_rc \n";
my @job_name = ("job1", "job2", "job3", "job4");
my $total_job = @job_name;
print "Total job present = $total_job + 1 \n";
for ($i = 0; $i < $total_job; $i++) {
    print "Curent job name: $job_name[$i] \n";
    system "cr_job $job_name[$i] $job_rc";
    sleep(10);
}

1 个答案:

答案 0 :(得分:1)

我认为你从错误的一方面解决问题。不要退出vi,而是考虑不运行它。

我只能猜测为什么vi会运行,这似乎与你的“工作”有关。其中一个可能的原因是他们运行默认文本编辑器来获取一些用户输入(这种行为的众所周知的例子是当你调用hg commitsvn commitcvs ci等时。不提供消息,它们会自动运行文本编辑器来获取提交消息。)

如果是这种情况,请首先检查“作业”,因为他们可能有选项来禁用此提示。如果没有,他们可能正在使用$EDITOR环境变量来决定运行哪个编辑器,将此变量设置为您准备的内容(例如,将默认消息写入作为参数给出的文件的脚本)可能会这样做。 p>