Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
|
Код 16.07.04 09:14 Число просмотров: 1443
Автор: Heller <Heller> Статус: Elderman
|
Сам я временно не имею доступа к транслятору, так что за работоспособность кода не отвечаю, но должно работать. Вначале в $temp кладёшь ответ which или type -p или ещё чего - совершенно в данном случае не важно. Далее:
$temp=~m((/\w+)+/(sendmail|\$(\d)+))i;
$1=~s/\$\d+/sendmail/;
В результате в $1 должен остаться путь до сендмыла. Если сюда примешать ещё и eval, то вообще можно получить универсальный поиск пути для чего угодно.
Если вызвать which ни с помощью обратных апострофов, ни с помощью system не получится, попробуй ещё использовать open:
undef $\;
open (FH,"which sendmail |");
$temp=<FH>;
close FH;
$\="\n";
Ну а если я мало ли где-то ошибся - пиши, буду править.
|
<programming>
|
[Perl] Работа с sendmail 14.07.04 16:03
Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
|
В общем, нужно написать скрипт, отправляющий мессаги, используя sendmail
Но когда я зашёл на #linux на русском далнете, мне сказали, что мой скрипт будет неуневерсален, если я пропишу определенный путь к сендмайлу, т.к. руть к нему разный в разных никсах.
но мне также сказали, что узнать путь к сендмайлу можно, используя команду "which sendmail".
А как мне перловым скриптом выполнить эту команду и ответ системы записать в переменную?
|
|
Код 16.07.04 09:14
Автор: Heller <Heller> Статус: Elderman
|
Сам я временно не имею доступа к транслятору, так что за работоспособность кода не отвечаю, но должно работать. Вначале в $temp кладёшь ответ which или type -p или ещё чего - совершенно в данном случае не важно. Далее:
$temp=~m((/\w+)+/(sendmail|\$(\d)+))i;
$1=~s/\$\d+/sendmail/;
В результате в $1 должен остаться путь до сендмыла. Если сюда примешать ещё и eval, то вообще можно получить универсальный поиск пути для чего угодно.
Если вызвать which ни с помощью обратных апострофов, ни с помощью system не получится, попробуй ещё использовать open:
undef $\;
open (FH,"which sendmail |");
$temp=<FH>;
close FH;
$\="\n";
Ну а если я мало ли где-то ошибся - пиши, буду править.
|
| |
re: Код 16.07.04 12:08
Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
|
Спасибо! ;)
Правда, у меня сейчас уже нет возможности проверить его работоспособность - ещё немного, и я улетаю в другую строну без доступа к компу на 3 недели =(
Но как только приеду - проверю и о результатах сообщу ;)
Ещё раз пасиб...)
|
|
проще путь в конфиг вынести, как это обычно и делается 14.07.04 16:04
Автор: !? <!?> Статус: Member
|
|
| |
Соглашусь с malgayan'ом, ну а вообще вызывай exec, а потом руби ответ регулярными выражениями 14.07.04 19:26
Автор: Heller <Heller> Статус: Elderman
|
|
| | |
если бы... 15.07.04 02:38
Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
|
malgajan, ты не понял - я хочу чтобы скриптсамискал путь к сендмайл ;)
272man, покажи на примере то, что ты написал, плз
И ещё вопрос, вот так можно сделать:
system("which sendmail") = $a; ---
?
|
| | | |
Используй обратные кавычки
15.07.04 12:57
Автор: choor Статус: Elderman
|
Используй обратные кавычки
$a=`which sendmail`;
|
| | | | |
Пробовал... 15.07.04 14:42
Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
|
> Используй обратные кавычки > $a=`which sendmail`;
В этом случае при
print "$a"; ничего не выводится =(
|
| | | | | |
Не ' ', а `` где буква Ё, левее цифры 1 15.07.04 21:30
Автор: choor Статус: Elderman
|
|
| | | | | | |
Я знаю, что означает термин "обратные ковычки", не волнуйся!... 16.07.04 00:50
Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
|
Я знаю, что означает термин "обратные ковычки", не волнуйся! Но они не дают никакого результата!
|
| | | | | | | |
Тогда это очень странно 16.07.04 08:30
Автор: choor Статус: Elderman
|
|
| | | | | | | | |
согласен, но ничего поделать не могу ;) 16.07.04 12:11
Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
|
|
| | | | | |
Это странно.. Скорее всего Ты вызываешь Perl с какими-то... 15.07.04 19:47
Автор: Heller <Heller> Статус: Elderman
|
> > Используй обратные кавычки > > $a=`which sendmail`; > > В этом случае при > print "$a"; ничего не выводится =(
Это странно.. Скорее всего Ты вызываешь Perl с какими-то флагами или используешь use strict 'чё-то там'. Такого не должно быть. А по поводу примера кода - сегодня ночью попробую что-нибудь замутить. Хотя у меня в QNX вообще which отсутствует..
ЗЫ. С exec я описался - конечно там system нужен. Старею, блин :-(
|
| | | |
имхо, лучше всего комбинированный способ 15.07.04 04:47
Автор: Ktirf <Æ Rusakov> Статус: Elderman Отредактировано 15.07.04 04:47 Количество правок: 1
|
То есть сначала мы смотрим на то, что написано в конфиге (смотрим в данном случае значит проверяем наличие - system("test -x $SENDMAIL_PATH"), наверное, можно лучше), после чего выясняем, есть ли вообще sendmail: system("sendmail <попытка что-то с ним сделать>").
C which беда в том, что формат вывода зависит от системы (например, у меня на SuSE Linux он дает "$1 is /real/path/to/$1", а на ALT Linux просто вываливает real/path/to/$1). Честно говоря, я не очень понимаю, зачем вообще нужно знать точный путь к sendmail, если можно просто попытаться им что-то сделать.
|
| | | | |
which не во всех *nix'ах есть 15.07.04 09:59
Автор: VEK Статус: Незарегистрированный пользователь
|
Например, в SCO UNIX (Openserver) ее нет, вместо нее команда type, подозреваю, что может не быть еще в каком-нибудь экзотическом unix'е.
В Solaris which есть.
|
| | | | | |
На самом деле, если ничего не путаю, type - это как раз стандартная команда. 15.07.04 13:15
Автор: Ktirf <Æ Rusakov> Статус: Elderman
|
То есть если хочется хорошей переносимости, то лучше пользовать type -p (кстати, если я опять же ничего не путаю, от нее вывод всегда будет вполне определенным).
|
| | | | | | |
то есть system("type -p sendmail"); даст мне правильный путь... 15.07.04 14:45
Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
|
> То есть если хочется хорошей переносимости, то лучше > пользовать type -p (кстати, если я опять же ничего не > путаю, от нее вывод всегда будет вполне определенным).
то есть system("type -p sendmail"); даст мне правильный путь к сендмайлу во всех никсах?
|
| | | | | | | |
Насколько я понимаю, да, только там его выкусывать придется 15.07.04 17:33
Автор: Ktirf <Æ Rusakov> Статус: Elderman
|
Потому что type -p отвечает в форме "name is /path/to/name".
|
| | | | | | | | |
Да это уже не такая проблема 16.07.04 00:52
Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
|
> Потому что type -p отвечает в форме "name is > /path/to/name". Да оишь бы хоть что-нить выдавала, а выкусить - это уже не такая проблема ;)
|
|
|