Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2009-03-24 00:57:36

  maro - Użytkownik

maro
Użytkownik
Zarejestrowany: 2006-10-21

perl i zmienna bash

Jak pobrać w perlu zmienną bashową?
np chce pobrać zmienną $IMG

Offline

 

#2  2009-03-24 08:36:30

  Minio - Użyszkodnik

Minio
Użyszkodnik
Skąd: Poznań, Polska
Zarejestrowany: 2007-12-22
Serwis

Re: perl i zmienna bash

Najpierw export IMG='costam'. W perl-u:

Kod:

print $ENV{'IMG'} . "\n"

Alternatywnie możesz użyć modułu Env::Bash.

Offline

 

#3  2009-03-24 11:22:00

  maro - Użytkownik

maro
Użytkownik
Zarejestrowany: 2006-10-21

Re: perl i zmienna bash

Minio napisał(-a):

Najpierw export IMG='costam'. W perl-u:

Kod:

print $ENV{'IMG'} . "\n"

Alternatywnie możesz użyć modułu Env::Bash.

Coś mi to nie działa, ale napiszę o co mi chodzi, może wtedy będzie łatwiej,
Chciałem napsiać sobie prosty skrypt w perlu do smtp-gated, i w examplu (który jest w bashu) wykorzystuje zmienne jak $FOUND, $SOURCE_IP i ja ich potrzebuje, tylko coś nie mogę sobie z tym poradzić! Chyba że się nie da czegoś takie zrobić?
W perlu to ja raczej raczkuje dopiero dlatego proszę o wyrozumiałość
Pozdrawiam

Offline

 

#4  2009-03-24 21:22:19

  Minio - Użyszkodnik

Minio
Użyszkodnik
Skąd: Poznań, Polska
Zarejestrowany: 2007-12-22
Serwis

Re: perl i zmienna bash

Nie znam tego programu. Mówisz o tym „examplu”?
Jeżeli tak, to nie mam pojęcia skąd on bierze te zmienne. Może pokaż wyniki poleceń:

Kod:

env
set | grep "^[A-Z]"

Najlepiej by było gdybyś opisał po kolei co się dzieje w systemie, ale obawiam się że to może przerosnąć Twoje możliwości (no offence).

Offline

 

#5  2009-03-24 23:19:55

  maro - Użytkownik

maro
Użytkownik
Zarejestrowany: 2006-10-21

Re: perl i zmienna bash

env:

Kod:

SHELL=/bin/bash
TERM=xterm
USER=root
LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.svgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:
SUDO_USER=maro
SUDO_UID=1000
USERNAME=root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAIL=/var/mail/maro
PWD=/root
LANG=pl_PL.UTF-8
PS1=\h:\w\$
SHLVL=1
SUDO_COMMAND=/bin/bash
HOME=/root
LOGNAME=root
SUDO_GID=1000
_=/usr/bin/env

set | grep "^[A-Z]"

Kod:

BASH=/bin/bash
BASH_ARGC=()
BASH_ARGV=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="3" [1]="2" [2]="39" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu")
BASH_VERSION='3.2.39(1)-release'
COLUMNS=80
DIRSTACK=()
EUID=0
GROUPS=()
HISTFILE=/root/.bash_history
HISTFILESIZE=500
HISTSIZE=500
HOME=/root
HOSTNAME=flower
HOSTTYPE=x86_64
IFS=$' \t\n'
LANG=pl_PL.UTF-8
LINES=24
LOGNAME=root
LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.svgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:'
MACHTYPE=x86_64-pc-linux-gnu
MAIL=/var/mail/maro
MAILCHECK=60
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PIPESTATUS=([0]="0")
PPID=1965
PS1='\h:\w\$ '
PS2='> '
PS4='+ '
PWD=/root
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
SHLVL=1
SUDO_COMMAND=/bin/bash
SUDO_GID=1000
SUDO_UID=1000
SUDO_USER=maro
TERM=xterm
UID=0
USER=root
USERNAME=root

Generalnie jest to mail proxy, przechwytuje sesje na port 25 i skanuje maile za pomoca spamassassin pod kątem spamu,
i clamav pod kątem wirusów, w momencie wykrycia spamu lub wirusa odpala skrypt!Np własnie ten który podałeś w linku

Offline

 

#6  2009-03-25 00:03:53

  Minio - Użyszkodnik

Minio
Użyszkodnik
Skąd: Poznań, Polska
Zarejestrowany: 2007-12-22
Serwis

Re: perl i zmienna bash

Wydaje mi się że ten program ustawia jakieś wewnętrzne zmienne i przekazuje je do podprocesu. Generalnie jedynym sposobem jaki widzę jest działanie naokoło, przy pomocy odpowiedniego wrappera napisanego w shellu. Będzie to skrypt, który będzie wywoływany przez smtp-gated, na którego końcu znajdzie się wywołanie skryptu właściwego, który pierwotnie chciałeś podpiąć pod to zdarzenie. Wyglądać on powinien mniej więcej tak:

Kod:

#!/bin/bash
export FOUND="$FOUND"
# tutaj eksportujesz wszystkie zmienne do których chcesz mieć dostęp w skrypcie perl-owym
/sciezka/do/skryptu.pl

Zaś w skryptu.pl zmienne to powinny być już w hashu %ENV, i do poszczególnych wartości odwołujesz się poprzez podanie nazwy zmiennej jako klucza (przykład masz w pierwszym moim poście).

Nie gwarantuję że to będzie działać. Widzę że autor jest Polakiem, więc może zapytaj go drogą mailową czy zna jakiś sposób na osiągnięcie tego co chcesz osiągnąć?

Alternatywnie możesz zmodyfikować źródła programu, aby ustawiane zmienne exportował (były zmiennymi środowiskowymi, nie lokalnymi). Być może takie zachowanie jest pomyślane przez autora, tylko domyślnie nie jest włączone? Sprawdź w pliku konfiguracyjnym i dokumentacji (czy nie istnieje odpowiedni przełącznik).

Offline

 

#7  2009-03-25 01:41:03

  maro - Użytkownik

maro
Użytkownik
Zarejestrowany: 2006-10-21

Re: perl i zmienna bash

Ten sposób na około działa dopóki nie próbuje użyć use Pg;
wtedy dostaje coś takiego:

Kod:

Can't load '/usr/lib/perl5/auto/Pg/Pg.so' for module Pg: libssl.so.0.9.8: odwzorowanie segmentu z obiektu dzielonego nie powiodło się: Nie można przydzielić pamięci at /usr/lib/perl/5.10/DynaLoader.pm line 196.
 at /etc/test line 3
Compilation failed in require at /etc/test line 3.
BEGIN failed--compilation aborted at /etc/test line 3.

Gdy ręcznie odpale skrypt to wszytsko jest ok :/
Ale zauważyłem że w skrypcie którego kiedyś używałem dzieje się to samo,
od czasu aktualnizacji z eth do lenny

Offline

 

#8  2009-03-25 09:46:53

  Minio - Użyszkodnik

Minio
Użyszkodnik
Skąd: Poznań, Polska
Zarejestrowany: 2007-12-22
Serwis

Re: perl i zmienna bash

Gdyby udało Ci się otrzymać informację o błędzie po angielsku (LC_MESSAGES=en_EN), być może google by pomogło w zlokalizowaniu problemu.

Nie napisałeś czy podczas ręcznego odpalania skryptu smtp-gated działa sobie gdzieś w tle. Czy jest możliwe że Twojemu systemowi naprawdę brakuje pamięci? Czy ustawiłeś na komputerze ograniczenie ilości pamięci która może zostać przydzielona jednemu procesowi?

Być może jest to błąd z używaną wersją modułu libdbd-pg-perl. Zobacz czy wersja z sida działa lepiej. Jeżeli nie, zawsze możesz wrócić do wersji z oldstable (repozytoria etcha dalej są dostępne). Choć sądząc po numerkach wersji, program przeszedł od tego czasu naprawdę wiele.

Offline

 

#9  2009-03-25 13:00:44

  maro - Użytkownik

maro
Użytkownik
Zarejestrowany: 2006-10-21

Re: perl i zmienna bash

Minio napisał(-a):

Gdyby udało Ci się otrzymać informację o błędzie po angielsku (LC_MESSAGES=en_EN), być może google by pomogło w zlokalizowaniu problemu.

Nie udało mi się uzyskać angielskiego komunikatu mimo iż pokazuje, że LC_MESSAGES=en_EN to i tak błąd jest taki jak wyżej.

Nie napisałeś czy podczas ręcznego odpalania skryptu smtp-gated działa sobie gdzieś w tle. Czy jest możliwe że Twojemu systemowi naprawdę brakuje pamięci? Czy ustawiłeś na komputerze ograniczenie ilości pamięci która może zostać przydzielona jednemu procesowi?

Tak smtp-gated działa cały czas w tle, pamięci raczej mu nie brakuje zwłaszcza ze htop pokazuje prawie 400MB wolnej, Ja takiego ograniczenia nie ustawiałem, chyba że ustawiło się podczas migracji z etch -> lenny wtedy też zaczęły się problemy również z innymi skryptami. Gdzie mogę sprawdzić czy coś takiego jest ustawione?

Być może jest to błąd z używaną wersją modułu libdbd-pg-perl. Zobacz czy wersja z sida działa lepiej. Jeżeli nie, zawsze możesz wrócić do wersji z oldstable (repozytoria etcha dalej są dostępne). Choć sądząc po numerkach wersji, program przeszedł od tego czasu naprawdę wiele.

Nie używam  libdbd-pg-perl tylko libpg-perl

Offline

 

#10  2009-03-25 19:03:13

  Minio - Użyszkodnik

Minio
Użyszkodnik
Skąd: Poznań, Polska
Zarejestrowany: 2007-12-22
Serwis

Re: perl i zmienna bash

maro napisał(-a):

Nie udało mi się uzyskać angielskiego komunikatu mimo iż pokazuje, że LC_MESSAGES=en_EN to i tak błąd jest taki jak wyżej.

Wyłącz smtp-gated. Ustaw powyższą zmienną. Albo w ogóle LC_ALL=en_EN. Uruchom smtp-gated, tak aby przejął ustawienia tej zmiennej. Jeżeli działa jako daemon, musisz zmodyfikować skrypt inicjujący.

maro napisał(-a):

Ja takiego ograniczenia nie ustawiałem, chyba że ustawiło się podczas migracji z etch -> lenny wtedy też zaczęły się problemy również z innymi skryptami. Gdzie mogę sprawdzić czy coś takiego jest ustawione?

ulimit -a
Ale upewnij się, że wyknujesz to dokładnie w tym środowisku w jakim jest uruchamiany smtp-gated.

maro napisał(-a):

Nie używam  libdbd-pg-perl tylko libpg-perl

Szkoda, bo widzę że ten moduł prawie w ogóle się nie zmienił, więc raczej wina nie leży po jego stronie. Dalej zalecam spróbowanie wersji z oldstable, jeśli jeszcze tego nie zrobiłeś.

Offline

 

#11  2009-03-25 19:37:35

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: perl i zmienna bash

Minio napisał(-a):

maro napisał(-a):

Nie udało mi się uzyskać angielskiego komunikatu mimo iż pokazuje, że LC_MESSAGES=en_EN to i tak błąd jest taki jak wyżej.

Wyłącz smtp-gated. Ustaw powyższą zmienną. Albo w ogóle LC_ALL=en_EN.

Albo LANG i LANGUAGE.


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#12  2009-03-25 20:04:33

  Minio - Użyszkodnik

Minio
Użyszkodnik
Skąd: Poznań, Polska
Zarejestrowany: 2007-12-22
Serwis

Re: perl i zmienna bash

azhag napisał(-a):

Minio napisał(-a):

Wyłącz smtp-gated. Ustaw powyższą zmienną. Albo w ogóle LC_ALL=en_EN.

Albo LANG i LANGUAGE.

W kwestii formalnej — zmienna LANG określa locale które mają być użyte w sytuacji gdy interesująca zmienna (np. LC_MESSAGES) jest pusta. To taka siatka bezpieczeństwa, która w naturalnych warunkach raczej rzadko jest używana.

Offline

 

#13  2009-03-26 00:02:03

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: perl i zmienna bash

tyle ze zmiana LANG zmienia zawartosc (prawie) wszystkich LC_* - zobacz

Kod:

LANG=C locale

btw. =C jest wygodniejsze w pisaniu niz jakies  =en_EN ...


"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#14  2009-03-26 00:08:43

  Minio - Użyszkodnik

Minio
Użyszkodnik
Skąd: Poznań, Polska
Zarejestrowany: 2007-12-22
Serwis

Re: perl i zmienna bash

Pisząc swojego posta posiłkowałem się wiedzą z tej wiadomości. Oczywiście masz rację, co może znaczyć że ten post już się zdezaktualizował (wcześniej nie zwróciłem uwagi, że liczy już prawie 7 lat).

Offline

 

#15  2009-03-26 17:42:01

  maro - Użytkownik

maro
Użytkownik
Zarejestrowany: 2006-10-21

Re: perl i zmienna bash

Próbowałem zainstalować ten pakiet z oldstable ale niestety kłopoty z zależnościami za nowa wersja perl-base i jeszcze innych paru.
Angielski komunikat:

Kod:

Can't load '/usr/lib/perl5/auto/Pg/Pg.so' for module Pg: libssl.so.0.9.8: failed to map segment from shared object: Cannot allocate memory at /usr/lib/perl/5.10/DynaLoader.pm line 196.
 at /etc/test line 3
Compilation failed in require at /etc/test line 3.
BEGIN failed--compilation aborted at /etc/test line 3.

Niesety google tez nie wiele mówi.

Offline

 

#16  2009-03-26 19:55:08

  Minio - Użyszkodnik

Minio
Użyszkodnik
Skąd: Poznań, Polska
Zarejestrowany: 2007-12-22
Serwis

Re: perl i zmienna bash

Radziłbym zapytać w jakimś miejscu gdzie siedzi wielu perl-owych ekspertów, np. perl Monks.

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)