Как выйти из сеанса vi, который выполняется во время выполнения сценария Perl? - PullRequest
1 голос
/ 20 февраля 2012

Мне нужно выполнить несколько заданий.После выполнения каждого задания оно запускает 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 Ответ

1 голос
/ 20 февраля 2012

Я думаю, что вы подходите к проблеме не с той стороны.Вместо выхода из vi, подумайте о том, чтобы не запускать его.

Я могу только догадываться, почему запускается vi, похоже, это связано с вашими «заданиями».Одна из возможных причин заключается в том, что они запускают текстовый редактор по умолчанию для захвата некоторого пользовательского ввода (хорошо известный пример такого поведения заключается в том, что когда вы вызываете hg commit, svn commit, cvs ci и т. Д. Без предоставления сообщения, ониавтоматически запускать текстовый редактор, чтобы получить сообщение о фиксации).

Если это так, сначала проверьте ваши «задания», так как у них могут быть варианты отключить эту самую подсказку.В противном случае они могут использовать переменную окружения $EDITOR, чтобы решить, какой редактор запускать, задав для этой переменной то, что вы готовите (например, скрипт, который будет записывать сообщение по умолчанию в файл, указанный в качестве параметра).

...