Как Cron влияет на модуль Getopt :: Long? - PullRequest
1 голос
/ 13 июля 2010

Я написал программу-обертку для mailx с использованием perl, которая позволяет мне легко добавлять вложения и делать некоторые другие изящные вещи, которые немного разочаровывают при выполнении mailx.:

use strict;
use warnings;
use Getopt::Long;

my ( $to, $from, $subject, $attachments, $body, $file ) = (undef) x 7;

GetOptions(
    "to=s"          => \$to,
    "from=s"        => \$from,
    "subject=s"     => \$subject,
    "attachments=s" => \$attachments,
    "body=s"        => \$body,
    "file=s"        => \$file,
);
$to      = getlogin unless $to;
$from    = getlogin unless $from;
$subject = " "      unless $subject;

Эта оболочка до сих пор работала нормально при вызове другими скриптами.Однако теперь, когда у нас есть скрипт, запускаемый Cron, происходят некоторые забавные вещи.Это задание Cron вызывает оболочку, только указав -t и -su, но не указав -fr (да, используются сокращения флагов).В полученном электронном письме правильно указывается «Кому:», однако отправитель указан как -s@blah.com с пустой строкой темы.Согласно приведенному выше коду, я могу только предположить, что между Cron и модулем Getopt :: Long происходит нечто странное.Кто-нибудь знает, почему работа Cron может вызвать такое странное поведение?Если это что-то еще, что не так, что бы это было?

1 Ответ

5 голосов
/ 13 июля 2010

Perl getlogin, вероятно, не возвращает ничего полезного из cron, цитируя из getlogin(3):

   getlogin() returns a pointer to a string containing
   the name of the user logged in on the controlling
   terminal of the process, or a null pointer if this
   information cannot be determined.

Я предлагаю изменить ваш crontab, чтобы всегда явно включать имя пользователя для любых опций, которые зависят от getlogin.Вы также можете изменить свою оболочку на getpwuid($<).(См. perlvar(1) и perlfunc(1) для подробностей о $< и getpwuid.)

Почему это испортило ваш mailx, я не знаю, но я собираюсь догадаться, что выиспользование обратных галочек, exec или system со строкой для запуска mailx, вместо exec или system со списком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...