【发布时间】:2012-02-20 09:31:21
【问题描述】:
我必须做一些工作。运行每个作业后,它会在内容上运行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);
}
【问题讨论】:
-
如果 vi 编辑器应该在没有人工干预的情况下完成,你为什么还要打开它?知道了这一点,我们可以看看如何解决这个问题。
-
“当我运行脚本时” -> 如果我们不知道它是什么,我们怎么知道它有什么问题?
-
实际上我们并没有打开vi编辑器,工作会自动打开vi编辑器,以防我们需要编辑任何数据(主要是需要更新的日期),保存后将相同的数据加载到db table.. 我实际上是在调用保存在数组中的每个作业,然后一个接一个地运行它们。
-
您是否尝试过管道文件句柄让程序说 /dev/null ? cr_job $job_name[$i] $job_rc 1>/dev/null 2>/dev/null 我猜 vi 正在为你“打开”,因为“cr_job”的输出告诉你的终端这样做。跨度>
-
我检查了它,但它绕过了终端,因此数据库没有得到更新。正如我之前提到的,一旦我们关闭终端,它将更新数据库中的这些数据,我们无法修改客户端提供的序列
标签: perl system exec vi interactive