cd permanent in *.pl/*.sh

Post Reply
Message
Author
hubert

cd permanent in *.pl/*.sh

#1 Post by hubert »

problem:
wenn man in einem shell- oder perlskript das aktuelle verzeichnis ("cwd") aendert (cd), aendert das nur das cwd des aktuellen prozesses (also des skripts), aber nicht das cwd der aufrufenden shell. genau das will ich aber: mein skript soll in ein bestimmtes verzeichnis wechseln, und nach beenden des skripts soll die bash in diesem verzeichnis sein. als einzige moeglichkeit faellt mir ein, das skript zu "sourcen", aber geht es auch anders (eleganter)?

tj

Re: cd permanent in *.pl/*.sh

#2 Post by tj »

Hi,

wenn ich dich richtig verstehe, dann willst du das Arbeitsverzeichnis des Elternprozesses deines
Skripts, also der shell aendern. Da weiss ich leider auch nichts wie man das erreichen koennte,
ausser vielleict ein C-Prog, dass dies mit 'getpid' usw. erreicht.
Aber eine (nicht so schoene) Loesung waere, die aktuelle Shell mit deinem Skript via 'exec' zu
ersetzen und am Ende des Skripts eine neue Shell zu erzeugen, also das Skript

-----------------------------
#!/bin/sh

......

cd ..
bash
------------------------

mit 'exec script.sh' aufzurufen. Wenn jemand eine elegantere Loesung hat wuerde mich
das auch interessieren <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">

tj

hubert

Re: cd permanent in *.pl/*.sh

#3 Post by hubert »

Hallo tj,

danke fuer die idee, so muesste es gehen. aber eigentlich will ich die eltern-shell
ja unangetastet lassen (und nur deren cwd aendern).

eine andere moeglichkeit, die ich mir ueberlegt habe, waere:

im skript das neue cwd in einer env-var ablegen:
export NEUES_CWD="das neue verzeichnis"
dann ein alias:
alias meinsk='meinskript; cd $NEUES_CWD'
wenn das skript keinen anderweitigen output hätte, könnte man auch das neue cwd ausdrucken und dann:
alias meins='cd $(meinskript)'

aber so richtig elegant sind diese loesungen auch nicht: ich bin kein fan von
environment-variablen, und der umweg ueber den alias ist umstaendlich.

ich muesste mal suchen, ob es nicht in perl irgendeinen kniff gibt.
(wenn es selbst in perl nicht gehen sollte, kann ich ja gleich aufgeben <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

Post Reply