Schrift
[thread]352[/thread]

Verzeichnisswechsel mit chdir: Wie springe ich wieder zurück???

Leser: 1


<< |< 1 2 >| >> 15 Einträge, 2 Seiten
Tom
 2004-08-10 14:13
#3398 #3398
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo,

Ich wechsle in meinem Script mit chdir zwei Verzeichnissebnen tiefer,

Code: (dl )
1
2
chdir "2004";
chdir "08";


das funktioniert auch alles, nur wie kann ich wieder in das Hauptverzeichniss wechseln wo das Verzeichniss "2004" liegt???

Danke

Tom
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
format_c
 2004-08-10 14:22
#3399 #3399
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
chdir "../..";
UNter Linux kannst du auch mit $ENV{PWD} herausfinden in welches Verzeichnis dein Script gerade gewechselt hat.

Gruß Alex
Dubu
 2004-08-10 14:33
#3400 #3400
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=format_c,10.08.2004, 12:22]UNter Linux kannst du auch mit $ENV{PWD} herausfinden in welches Verzeichnis dein Script gerade gewechselt hat.[/quote]
$ENV{PWD} zeigt an, in welchem Verzeichnis das Skript gestartet wurde.
Anschliessende Verzeichniswechsel wirken sich nicht auf das Environment aus.
Dubu
 2004-08-10 14:46
#3401 #3401
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=format_c,10.08.2004, 12:22]chdir "../..";
[/quote]
Ach ja, das kann uebrigens schief gehen, wenn symbolische Links vom Verzeichniswechsel betroffen sind.

Beispiel:
Gegeben sei die folgende Verzeichnisstruktur:
 /test
 /test/bar
 /test/bar/foo
 /test/baz -> /test/bar/foo

d.h. /test/baz ist ein Symlink auf /test/bar/foo.

Wenn ich jetzt in /test bin, ein chdir("baz") mache und anschliessend ein chdir(".."), wo bin ich dann?
In /test/bar, nicht in /test!

Code: (dl )
1
2
3
4
5
6
7
8
dubu@localhost:/test> ls -l
insgesamt 0
drwxr-xr-x    3 dubu      users          72 2004-08-10 12:41 bar/
lrwxrwxrwx    1 dubu      users           7 2004-08-10 12:41 baz -> bar/foo/
dubu@localhost:/test> perl -MCwd -le 'print getcwd; chdir "baz" or die; print getcwd; chdir ".." or die; print getcwd;'
/test
/test/bar/foo
/test/bar


Edit: Fuer Portabilitaet getcwd() statt `pwd` benutzt.\n\n

<!--EDIT|Dubu|1092135242-->
renee
 2004-08-10 14:57
#3402 #3402
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ein chdir "2004"; würde ich so auch nicht einfach so machen. Man weiß nie 100%ig, von welchem Verzeichnis aus das Programm gestartet wird.

Ich würde Find::Bin verwenden.

Code: (dl )
1
2
3
use FindBin ();

chdir "$FindBin::Bin/2004";
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Dubu
 2004-08-10 15:19
#3403 #3403
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Naja, fuer die meisten Probleme, bei denen ich Perl einsetze, ist es eher irrelevant, wo das Skript liegt (meist /usr/local/bin oder ~/bin), aber dafuer wichtig, von wo es aufgerufen wurde. :)

Zugegeben sieht das aber bei CGIs meist anders aus.\n\n

<!--EDIT|Dubu|1092136840-->
renee
 2004-08-10 15:40
#3404 #3404
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Bei mir sieht's da anders aus... Wenn es FindBin nicht geben würde, wäre ich teilweise aufgeschmissen...

Bearbeitet von Crian: Aus Mitleid dem "FinBin" ein "d" spendiert =)\n\n

<!--EDIT|Crian|1092140900-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
ptk
 2004-08-10 16:23
#3405 #3405
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Ich hab mal die Funktion _save_pwd geschrieben, wenn man zwischenzeitlich in ein anderes Verzeichnis springen will und danach wieder zurueck will. Sogar nach einem die im Code wird das alte Verzeichnis wiederhergestellt. Am besten gefaellt mir die Syntax mit dem anonymen Sub.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
=head2 _save_pwd(sub { ... })

=for category File

Save the current directory and assure that outside the block the old
directory will still be valid.

=cut

sub _save_pwd (&) {
my $code = shift;
require Cwd;
my $pwd = Cwd::cwd();
eval {
$code->();
};
my $err = $@;
chdir $pwd or die "Can't chdir back to $pwd: $!";
die $err if $err;
}


Anwendung:
Code: (dl )
1
2
3
4
_save_pwd {
chdir "foobar" or die $!;
... mach was ...
};
Crian
 2004-08-10 16:32
#3406 #3406
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
schick!
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
format_c
 2004-08-10 17:21
#3407 #3407
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Cool so ähnlich wie pushd

Gruß Alex
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2004-08-10 14:13.