Thread View: pl.comp.lang.perl
10 messages
10 total messages
Started by Slawek
Wed, 28 Oct 2009 09:21
Jak skrypt ma się dowiedzieć w jakim jest katalogu?
Author: Slawek
Date: Wed, 28 Oct 2009 09:21
Date: Wed, 28 Oct 2009 09:21
9 lines
1076 bytes
1076 bytes
Witam, Jak skrypt ma się dowiedzieć w jakim jest katalogu? W faq znalazłem tylko jak sprawdzić bieżący katalog czyli skąd skrypt został uruchomiony a to nie to samo. Pozdr. Sławek
Re: Jak skrypt ma się dowiedzieć w jakim jest katalogu?
Author: Adam Osuchowski
Date: Wed, 28 Oct 2009 09:39
Date: Wed, 28 Oct 2009 09:39
23 lines
1516 bytes
1516 bytes
Slawek wrote:
> Jak skrypt ma się dowiedzieć w jakim jest katalogu?
use Cwd;
print getcwd;
> W faq znalazłem tylko jak sprawdzić bieżący katalog czyli skąd skrypt został
> uruchomiony
> a to nie to samo.
Co to jest wg. Ciebie ,,katalog skąd skrypt został uruchomiony''
Jeżeli skrypt zmienia katalog bieżący procesu, to nie jesteś później
w stanie ustalić, jaki katalog był bieżącym w momencie jego uruchamiania
(oczywiście, jeśli sobie tego nie zapamiętasz wcześniej).
Jeżeli Cię interesuje w którym katalogu jest sam skrypt to użyj:
use FindBin;
print $FindBin::Bin;
ale to nie jest katalog bieżący i nie ma żadnej potrzeby, aby proces do
niego wchodził.
Re: Jak skrypt ma się dowiedzieć w jakim jest katalogu?
Author: Slawek
Date: Wed, 28 Oct 2009 10:35
Date: Wed, 28 Oct 2009 10:35
21 lines
1739 bytes
1739 bytes
>Jeżeli Cię interesuje w którym katalogu jest sam skrypt to użyj: > use FindBin; > print $FindBin::Bin; Dziękuje :) dokładnie o to chodziło. >Co to jest wg. Ciebie ,,katalog skąd skrypt został uruchomiony'' sorry ale nie wiem co tu tłumaczyć, jest to katalog bieżący ale ... równie dobrze ktoś może być w katalogu /root i uruchomić mój skrypt po przez /home/users/ja/mojskrypt.pl Jeżeli w tym przypadku skorzystam z print getcwd; => wynikiem będzie /root i otrzymam informacje nieużyteczne dla mojego skryptu i skrypt może nie działać prawidłowo. skorzystanie natomiast z print $FindBin::Bin; => wynikiem będzie /home/users/ja i w tym przypadku skrypt może mieć dostęp do swoich plików pomocniczych. Pozdr. Sławek
Re: Jak skrypt ma się dowiedzieć w jakim jest katalogu?
Author: Adam Osuchowski
Date: Wed, 28 Oct 2009 10:52
Date: Wed, 28 Oct 2009 10:52
8 lines
1286 bytes
1286 bytes
Slawek wrote: > sorry ale nie wiem co tu tłumaczyć, jest to katalog bieżący ale ... > równie dobrze ktoś może być w katalogu /root i uruchomić mój skrypt po > przez /home/users/ja/mojskrypt.pl Pokręciłeś nazewnictwo i stąd moje pytanie. Katalog bieżący to jest właściwość procesu i jest on całkowicie niezależny od katalogu w którym umieszczona jest uruchamiana binarka. A Ty pytałeś o to drugie.
Re: Jak skrypt ma się dowiedzieć w jakim jest katalogu?
Author: Slawek
Date: Wed, 28 Oct 2009 10:55
Date: Wed, 28 Oct 2009 10:55
10 lines
1370 bytes
1370 bytes
> Pokręciłeś nazewnictwo i stąd moje pytanie. Katalog bieżący to jest > właściwość procesu i jest on całkowicie niezależny od katalogu w którym > umieszczona jest uruchamiana binarka. A Ty pytałeś o to drugie. ok. ale skrypcik już działa prawidłowo. Jeszcze raz dziękuje i pozdrawiam Sławek
Re: Jak skrypt ma się dowiedzieć w jakim jest katalogu?
Author: Maciej Misiak
Date: Fri, 30 Oct 2009 20:39
Date: Fri, 30 Oct 2009 20:39
33 lines
1758 bytes
1758 bytes
Adam Osuchowski pisze: > Slawek wrote: >> W faq znalazłem tylko jak sprawdzić bieżący katalog czyli skąd skrypt został >> uruchomiony >> a to nie to samo. > > Co to jest wg. Ciebie ,,katalog skąd skrypt został uruchomiony'' > > Jeżeli skrypt zmienia katalog bieżący procesu, to nie jesteś później > w stanie ustalić, jaki katalog był bieżącym w momencie jego uruchamiania > (oczywiście, jeśli sobie tego nie zapamiętasz wcześniej). Oczywiście, że jesteś w stanie: #!perl -l use Cwd; print $0,' ',getcwd; chdir 'D:\\'; print $0,' ',getcwd; daje taki wynik: C:\temp>abc.pl C:\temp\abc.pl C:/temp C:\temp\abc.pl D:/ C:\temp> czyli mówiąc wprost: można "katalog skąd skrypt został uruchomiony" wyczytać ze zmiennej $0. -- grizzley
Re: Jak skrypt ma się dowiedzieć w jakim jest katalogu?
Author: Adam Osuchowski
Date: Fri, 30 Oct 2009 22:13
Date: Fri, 30 Oct 2009 22:13
15 lines
1633 bytes
1633 bytes
Maciej Misiak wrote: > Oczywiście, że jesteś w stanie: Owszem, nie jestem. Przeczytaj dokładnie o czym pisałem. Ty podajesz sposób na ustalenie, w którym katalogu leży wykonywany skrypt, bo to pośrednio zawiera $0 (a wprost zawarte jest w $FindBin::Bin), natomiast ja pisałem o _katalogu_bieżącym_, a to jest zupełnie co innego. Po zmianie katalogu bieżącego, jeżeli wcześniej jawnie nie zapamiętałeś jego poprzedniej wartości, nie masz możliwości ustalenia jaki był. > czyli mówiąc wprost: można "katalog skąd skrypt został uruchomiony" > wyczytać ze zmiennej $0. Pomijając fakt, że $0 zawiera ścieżkę do skryptu, więc aby otrzymać sam katalog trzeba odciąć jej ostatni człon, co m.in. robi FindBin.
Re: Jak skrypt ma się dowiedzieć w jakim jest katalogu?
Author: Maciej Zielenkieiwcz
Date: Fri, 30 Oct 2009 22:48
Date: Fri, 30 Oct 2009 22:48
41 lines
1785 bytes
1785 bytes
On 2009-10-30 20:39, Maciej Misiak <grizzley@poczta.onet.pl> wrote: > Adam Osuchowski pisze: >> Slawek wrote: >> Jeżeli skrypt zmienia katalog bieżący procesu, to nie jesteś później >> w stanie ustalić, jaki katalog był bieżącym w momencie jego uruchamiania >> (oczywiście, jeśli sobie tego nie zapamiętasz wcześniej). > > Oczywiście, że jesteś w stanie: > > #!perl -l > > use Cwd; > print $0,' ',getcwd; > chdir 'D:\\'; > print $0,' ',getcwd; > > daje taki wynik: > C:\temp>abc.pl > C:\temp\abc.pl C:/temp > C:\temp\abc.pl D:/ > > C:\temp> > > czyli mówiąc wprost: można "katalog skąd skrypt został uruchomiony" > wyczytać ze zmiennej $0. W ogólności to nie jest prawda. $ pwd /tmp/pl $ ./x.pl ./x.pl /tmp/pl ./x.pl /home Przy czym x.pl zawiera: #!/usr/bin/perl -l use Cwd; print $0,' ',getcwd; chdir '/home'; print $0,' ',getcwd;
Re: Jak skrypt ma się dowiedzieć w jakim jest katalogu?
Author: Maciej Misiak
Date: Sat, 31 Oct 2009 09:02
Date: Sat, 31 Oct 2009 09:02
63 lines
2421 bytes
2421 bytes
Maciej Zielenkieiwcz pisze: > On 2009-10-30 20:39, Maciej Misiak <grizzley@poczta.onet.pl> wrote: >> Adam Osuchowski pisze: >>> Slawek wrote: >>> Jeżeli skrypt zmienia katalog bieżący procesu, to nie jesteś później >>> w stanie ustalić, jaki katalog był bieżącym w momencie jego uruchamiania >>> (oczywiście, jeśli sobie tego nie zapamiętasz wcześniej). >> Oczywiście, że jesteś w stanie: >> >> #!perl -l >> >> use Cwd; >> print $0,' ',getcwd; >> chdir 'D:\\'; >> print $0,' ',getcwd; >> >> daje taki wynik: >> C:\temp>abc.pl >> C:\temp\abc.pl C:/temp >> C:\temp\abc.pl D:/ >> >> C:\temp> >> >> czyli mówiąc wprost: można "katalog skąd skrypt został uruchomiony" >> wyczytać ze zmiennej $0. > > W ogólności to nie jest prawda. > > $ pwd > /tmp/pl > $ ./x.pl > ./x.pl /tmp/pl > ./x.pl /home > > Przy czym x.pl zawiera: > > #!/usr/bin/perl -l > use Cwd; > print $0,' ',getcwd; > chdir '/home'; > print $0,' ',getcwd; No to najwidoczniej raz jeden Winzgroza przeważa nad linuksami, bo niezależnie od wywołania $0 zawiera pełną ścieżkę :) C:\>temp\abc.pl C:\temp\abc.pl C:/ C:\temp\abc.pl D:/ C:\>cd temp C:\temp>.\abc.pl C:\temp\abc.pl C:/temp C:\temp\abc.pl D:/ C:\temp>\temp\abc.pl C:\temp\abc.pl C:/temp C:\temp\abc.pl D:/ C:\temp> -- grizzley
Re: Jak skrypt ma się dowiedzieć w jakim jest katalogu?
Author: Maciej Misiak
Date: Sat, 31 Oct 2009 09:11
Date: Sat, 31 Oct 2009 09:11
16 lines
1694 bytes
1694 bytes
Adam Osuchowski pisze: > Maciej Misiak wrote: >> Oczywiście, że jesteś w stanie: > > Owszem, nie jestem. Przeczytaj dokładnie o czym pisałem. Ty podajesz > sposób na ustalenie, w którym katalogu leży wykonywany skrypt, bo to > pośrednio zawiera $0 (a wprost zawarte jest w $FindBin::Bin), natomiast > ja pisałem o _katalogu_bieżącym_, a to jest zupełnie co innego. Po zmianie > katalogu bieżącego, jeżeli wcześniej jawnie nie zapamiętałeś jego > poprzedniej wartości, nie masz możliwości ustalenia jaki był. Aaa, spoko. Powinienem się podpiąć bezpośrednio pod pytanie OP z poprzednim postem, bo tego potrzebował. -- grizzley
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads