working directory "exportálása" bash scriptből

Fórumok

Hali!

Idegesített egy ideje, hogy ha screen használok, és mondjuk ugyanabban a könyvtárban kellene sok ablakból dolgoznom, akkor mindig cd-zhetek. Helyette gondoltam írok egy kis scriptet:

#!/bin/bash
lwd=~/bin/lwd
echo "#!/bin/bash" >$lwd
echo "cd '"`pwd`\' >$lwd
chmod 755 $lwd

De persze lwd -t futtatva nem történik semmi, hisz az egy külön shellt indít, és csak abban változik a current working directory.

Hogyan tudok olyan shell scriptet írni/futtatni, hogy a végén az általa végrehajtott cd utasítás a futtató shell számára is érvényes legyen?

Hozzászólások

esetleg
. ${lwd}
(pötty szóköz) indítandó állomány >> ez az adott shellben futtatja a szkriptet

Ha átadod a tudásod neked attól még nem lesz kevesebb belőle..

hm, ez tetszik, azt hittem, hogy ilyet nem is lehet ... .

export az a gyerek shellekben is elérhetővé teszi a változót tartalmával együtt.
Vagyis javallott exportálni, ha más meghívott shellből/programból használni akarod a aváltozó értékét.

Ha átadod a tudásod neked attól még nem lesz kevesebb belőle..

pontosan ezért írtam idézőjelek közé, mert most nem változót szeretnék exportálni, hanem, hogy ha egy shell script így néz ki

#!/bin/bash
cd /tmp/akarmi

és ezt lefuttatom akárhol, akárhogyan, akkor utána a szülőnek futás után a current working directory-ja legyen a /tmp/akarmi

--
The Net is indeed vast and infinite...
http://gablog.eu

#...
echo "#!/bin/bash" >$lwd
echo "cd '"`pwd`\' >$lwd
#...

Ezt így miért?
Mármint ha jól olvasom, az idézett sorok közül a második felülírja az elsőt...
Nem így kellett volna?

#...
echo "#!/bin/bash" >$lwd
echo "cd '"`pwd`\' >>$lwd
#...

--
"It all keeps adding up
I think I'm cracking up
Am I just paranoid?
I'm just stoned"
/Green Day - Basket Case/

Tömör válasz: sehogy.

Hosszú válasz: ha új processzt hajtasz végre, akkor abban bizonyos változásokat a *szülő* processz nem fog érzékelni (könyvtárváltás, változómódosítás); másokat igen (fájl létrehozása pl.) A változók (és ide tartozik az aktuális könyvtár neve) a processzeknek olyan memóriaterületein tárolódnak, amihez másnak nincs köze. Exportálni éppen lehet, de ekkor is csak *öröklődnek* .

Itt fentebb valaki javasolta a . szkript
futtatási formát, ez pont ezt küszöböli ki, hisz nem másik processzben fog lefutni a szkript.

Esetleg helyette a ~/.bashrc-be ez?

function lwd () {
. ~/bin/lwd
}

udv. rubasov