🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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?
#51640
Author: Slawek
Date: Wed, 28 Oct 2009 09:21
9 lines
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?
#51641
Author: Adam Osuchowski
Date: Wed, 28 Oct 2009 09:39
23 lines
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?
#51642
Author: Slawek
Date: Wed, 28 Oct 2009 10:35
21 lines
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?
#51643
Author: Adam Osuchowski
Date: Wed, 28 Oct 2009 10:52
8 lines
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?
#51644
Author: Slawek
Date: Wed, 28 Oct 2009 10:55
10 lines
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?
#51645
Author: Maciej Misiak
Date: Fri, 30 Oct 2009 20:39
33 lines
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?
#51647
Author: Adam Osuchowski
Date: Fri, 30 Oct 2009 22:13
15 lines
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?
#51649
Author: Maciej Zielenkieiwcz
Date: Fri, 30 Oct 2009 22:48
41 lines
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?
#51650
Author: Maciej Misiak
Date: Sat, 31 Oct 2009 09:02
63 lines
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?
#51648
Author: Maciej Misiak
Date: Sat, 31 Oct 2009 09:11
16 lines
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