Toon posts:

[Linux] cd mydir in script? (of: ja, het lijkt zo makkelijk)

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik (=behoorlijke linux n00b) probeer dus een shell scriptje te maken die me snel naar een directory brengt. En voordat er iemand over symlinks begint te lullen, ik wil ook nog wat andere dingen doen, een shell script is dus the way to go.
Maargoed, ik met al mijn batch bestand kennis dacht dat de simpele doch geniale code

code:
1
2
3
#!/bin/sh

cd /naar/een/directory


wel zou doen wat ik wil, maar niets is minder waar. Als ik na de cd (in hetzelfde scriptje) nog wat commando's uitvoer blijk ik echt in die dir terecht gekomen te zijn, maar zodra het scriptje stopt wordt ik automatisch weer teruggegooid naar de oorspronkelijke dir :? . Dat zal af en toe misschien best handig zijn, maar dat wil ik nu dus juist niet...

Zo moet het dus niet, maar hoe dan wel??

Verwijderd

Volgens mij moet het lukken zoals je het hier hebt staan.. B)
misschien dat je wordt terug gezet waar je begon door de andere commando's die je er echt zet. :?

  • efan
  • Registratie: Januari 2001
  • Niet online
zou dat niet kunnen dan? mischien dat hij een ŽcdŽ naar een bepaalde dir doet, en denkt dat ie daar de volgende commandoŽs moet uitvoeren. zodra het script klaar is, dan sprint ie weer terug naar de directory waaruit het script gestart is....

welke van de 2 het is weet ik niet. maar het klinkt allebei wel een klein beetje logisch denk ik zo.... :)

Verwijderd

probeer t is met een function

dus bijv

function gohome () { cd /home/user; }

en type dan gohome

btw
je wist toch wel dat als je alleen cd typt dat je dan naar je home dir gaat he ??

  • Fatal-Error
  • Registratie: Juli 2001
  • Niet online
Wat je wilt werkt inderdaad niet, omdat jouw scriptje als apart proces wordt uitgevoerd. Om een simpele 'cd /naar/een/directory' te doen kun je beter gebruik maken van alias (bv. alias cd2='cd /naar/een/directory').

Welcome to the desert of the real.


Verwijderd

Topicstarter
Fatal-Error schreef op 20 september 2002 @ 19:15:
Wat je wilt werkt inderdaad niet, omdat jouw scriptje als apart proces wordt uitgevoerd. Om een simpele 'cd /naar/een/directory' te doen kun je beter gebruik maken van alias (bv. alias cd2='cd /naar/een/directory').
hmmm, klinkt aannemelijk, maar is wel behoorlijk jammer. Snap eigenlijk ook niet wat het nut is om een scriptje als apart proces uit te voeren, maar dat zal wel mijn kortzichtigheid zijn...
Thanx voor de hulp iig, die alias doet nog niet helemaal wat ik wil, maar het is in ieder geval makkelijker dan telkens naar 5 dirs diep te moeten gaan.

Verwijderd

Daar is tab filename completion toch voor uitgevonden?

Verwijderd

ummm mensen.
hij word terug gegooit naar de oude dir omdat hij
#!/bin/sh aan roept.

script opent een nieuwe shell
doet wat hij moet doen
en exit de shell weer.

weet btw niet of #! /bin/sh
weghalen werkt hoor. maar je kan het proberen.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 08:25

Creepy

Tactical Espionage Splatterer

voer je scriptje eens uit met een . ervoor (dus ". scriptje").
Door de . te gebruiken wordt het script in de HUIDIGE shell uitgevoerd i.p.v. in een nieuwe.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Verwijderd schreef op 20 september 2002 @ 19:39:
Daar is tab filename completion toch voor uitgevonden?
Dat gebruik ik nu al, maar dat is dus nog steeds teveel werk (ik moet drie keer naar een dir 5 nivea's diep of zo)
Verwijderd schreef op 20 september 2002 @ 19:47:
ummm mensen.
hij word terug gegooit naar de oude dir omdat hij
#!/bin/sh aan roept.

script opent een nieuwe shell
doet wat hij moet doen
en exit de shell weer.

weet btw niet of #! /bin/sh
weghalen werkt hoor. maar je kan het proberen.
Nope, had ik al geprobeerd, no luck
Creepy schreef op 20 september 2002 @ 19:51:
voer je scriptje eens uit met een . ervoor (dus ". scriptje").
Door de . te gebruiken wordt het script in de HUIDIGE shell uitgevoerd i.p.v. in een nieuwe.
Geen verschil...

Gebruik hier trouwens bash (Mandrake 7 dist), maar 't was precies hetzelfde onder Debian (weet niet welke shell), 't zal dus echt wel 'by design' zijn, maar toch vaag hoor... Meer suggesties??

Verwijderd

Topicstarter
Verwijderd schreef op 20 september 2002 @ 19:07:
Volgens mij moet het lukken zoals je het hier hebt staan.. B)
misschien dat je wordt terug gezet waar je begon door de andere commando's die je er echt zet. :?
Beetje late reactie: Uitgesloten, ten eerste heb ik ook een testje gedaan met alleen de cd erin, ten tweede zijn de commando's die ik erna uitvoer alleen van het type 'kwrite somefile &' (en ja ik wou dat UltraEdit ook op linux draaide, dan had ik het hele probleem niet gehad, ik wil namelijk makkelijk een soort project/workspace kunnen openen; dwz een hele rits files omdat ik in meerdere files tegelijk moet werken en helemaal gek wordt van het handmatig openen van al die dingen. ow ja, emacs zuigt, eh, voldoet niet aan mijn eisen ;) )

Verwijderd

okee, wat dacht je hiervan:

code:
1
2
3
4
5
6
7
8
9
#!/bin/sh
#
# cd into some dir and run an app
# args are the command to run+parms

DIR=/some/dir
pushd $DIR
$@
popd

Verwijderd

Topicstarter
Verwijderd schreef op 20 september 2002 @ 20:39:
okee, wat dacht je hiervan:

code:
1
2
3
4
5
6
7
8
9
#!/bin/sh
#
# cd into some dir and run an app
# args are the command to run+parms

DIR=/some/dir
pushd $DIR
$@
popd
Ehh, dan zie ik
code:
1
2
~ /mijn/dir/ergens ~
~

een 'pwd' verteld me dat ik nog steeds in mn start dir zit....helaas dus...

  • Fatal-Error
  • Registratie: Juli 2001
  • Niet online
Jouw scriptje wordt uitgevoerd door bash, maar niet door het hetzelfde bash-proces als waar je "in zit". Na het eindigen van je scriptje kom je dus weer in je oude (ongewijzigde) bash terug.
Via de eerdergenoemde ". source" constructie wordt het script in de huidige bash shell uitgevoerd. Dit moet werken, zo staat het in de man page van bash en zo werkt het bij mij ook. Of wordt er mandrake zo'n zeldzame bash meegeleverd?

Welcome to the desert of the real.


Verwijderd

vraagje hoor, maar kun je niet gewoon kwrite openen met
kwrite blaat.c blaat_main.c blaat_gui.c blaat_func.c

?
kweet niet gewbruik zelf geen kwrite.
(btw. voor een goede writer moet je ScILA of zo iets eens bekijken. (zla zo wel iemand komen die de goede naam kent want ik ben hem vergetn :( )
of die projecten ondersteunt weet ik niet, maar tis iig wel een vette programeer writer. )

Verwijderd

Het . commando is nochtans de oplossing !! de reden is al 2x gezegd en ga ik dus niet meer herhalen :p

Wat ik wel wil vragen is of je de code met of zonder de eerste lijn hebt uitgevoerd ? "#!/bin/sh" deze dus ? Ik weet niet of het er wat mee kan te maken hebben maar die lijn is niet echt nodig probeer het dus eens zonder.

  • sebas
  • Registratie: April 2000
  • Laatst online: 16-12-2025
code:
1
2
3
4
5
6
7
sebas@sebas:~> echo "cd /maroot" > mr
sebas@sebas:~> chmod +x mr
sebas@sebas:~> ./mr
sebas@sebas:~> pwd
/home/sebas
sebas@sebas:~> . mr
sebas@sebas:/maroot>


Werkt prima hier hoor. Check nog eens wat je gedaan hebt dus.

Everyone complains of his memory, no one of his judgement.


Verwijderd

Topicstarter
Sebas schreef op 21 september 2002 @ 02:17:
code:
1
2
3
4
5
6
7
sebas@sebas:~> echo "cd /maroot" > mr
sebas@sebas:~> chmod +x mr
sebas@sebas:~> ./mr
sebas@sebas:~> pwd
/home/sebas
sebas@sebas:~> . mr
sebas@sebas:/maroot>


Werkt prima hier hoor. Check nog eens wat je gedaan hebt dus.
Ahhh, ok...Schaam...had het verkeerd gelezen en had het scriptje gerenamed naar '. scriptje'...lekker handig 8)7...Anyway, als ik hem start met . ervoor doet ie het hier idd ook helemaal goed... _/-\o_
Pagina: 1