← Back to team overview

sslug-teknik team mailing list archive

Re: Finde stien til et shellscript

 

Jørgen Heesche wrote:
Kenneth Ahn Jensen wrote:
Hep

Jeg vil gerne have at mit bash-script opnår en smule selvbevidsthed.

Når jeg kører scriptet skal det gerne kunne finde ud af hvor det ligger henne, fordi der så skal gøres noget relativt til dette katalog.

Hvordan finder jeg ud af det?
$0 giver mig jo bare det "navn" som scriptet er startet med, så det kan være /home/user/bin/script.sh eller ./script.sh (eller endnu værre ../../bin/script.sh ). Det vil selvfølgelig altid være den relative sti til hvor min CWD er, men jeg ville gerne kunne finde den absolutte, uden at skulle konkatenere $CWD med $0 og dermed kunne få /home/user/some/path/../../bin/script.sh).

Nogen forslag?

Det er nogle fantastisk snedige og indviklede metoder, der er forslået i denne tråd.
Der er kun én rimelig måde at gøre det på.
Private ekserkverbare filer, det være sig bashscripts eller andre typer, samles i ét directory, f.eks. /home/user/bin. Denne sti skal inkluderes i environment variablen PATH.
Det gøres sådan:
I filen /home/user/.bashrc tilføjes:  export PATH=$PATH:/home/user/bin
For at det kan virke straks skal man bruge kommandoen 'source .bashrc' , og så vil det iøvrigt virke hver gang man logger ind, eller åbner en ny Xterminal.
Prøv dette testscript:
testsh:
#!/bin/sh
echo $0

 Lav cd til et vilkårligt directory,
 tast testsh

Og voila: du vil se udskriften /home/user/bin/testsh

Og her vil nogen så indvende: jamen det var jo kun stien der skulle vises.
Korrekt, scriptnavnet skal skæres væk. Her kommer Frank Damgårds metode ind som en klar vinder.
Prøv dette script:
 #!/bin/sh
 navn=${0##*/}
 sti=${0%/*}
 echo navn = $navn
 echo sti = $sti

Resultat:
navn = testsh
sti = /home/user/bin

--
Med venlig hilsen

Jørgen Heesche
mailto:heesche@xxxxxxxxxxx
Registered Linux User #401007


References