• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] Ergebnisdatei im selben Verzeichnis des Scripts

framp

Moderator
Teammitglied
Was ist denn der Standardweg wie man in einem Script herausfindet in welchen absoluten Verzeichnis das Script steht? Ich möchte in genau demselben Verzeichnis Ergebnisse des Scripts ablegen.
 
OP
framp

framp

Moderator
Teammitglied
Danke für den Tip. Nur passt das noch nicht so ganz:

tst.sh
Code:
#!/bin/bash

echo "\$0:" $0
echo "\$PWD: " $PWD

Code:
framp@obelix:/disks/sdc6/home/framp> ./Desktop/tst.sh
$0: ./Desktop/tst.sh
$PWD:  /disks/sdc6/home/framp
framp@obelix:/disks/sdc6/home/framp>

Ich führe also ein Script in ./Desktop aus ... aber $PWD gibt mir nicht /disks/sdc6/home/framp/Desktop ...
 

prinzunix

Hacker
Du führst das Script in
Code:
/disks/sdc6/home/framp
aus, weil der Aufruf
aus dem Verzeichnis erfolgte.

Wenn Du Dich in der Konsole nach
Code:
/disks/sdc6/home/framp/Desktop
begibst und es dann mit
Code:
./tst.sh
aufrufst, dann würde es auch
Code:
.../Desktop
ausgeben.

Ansonsten musst Du ein
Code:
cd ~/Desktop
in Dein Script einfügen.
Probier es mal selber.

Bis denn.

Prinzunix
 

oc2pus

Ultimate Guru
ok, das gibt den Pfad vom Aufruf ...

schau mal hier:
http://www.issociate.de/board/post/285661/Bash_script_own_path.html

Re: Bash script own path
>How does a script find its own path?
>$PWD gives me the path from which it is run...

In short: you can't (reliably). Depending on the interactive shell or
invoking program, $0 contains the full path or not. Executables can use
execv to insert any string they like into $0. You can try using the
which command, if $0 does not supply the information

# error checking omitted
PROGNAME=`basename $0` # strip of path
PROGDIR=`dirname $0`

if [ "$PROGDIR" = "." ]
then
PROG=`which $PROGNAME`
PROGDIR=`dirname $PROG`
fi

...
 

prinzunix

Hacker
which funktioniert hier nicht, weil which nur den Pfad auswertet
und ~/Desktop nicht im Pfad liegt. Zumindest bei mir nicht.

Wenn das Verzeichnis . ist, dann geht aber wieder pwd.

Bis denn.

Prinzunix
 
OP
framp

framp

Moderator
Teammitglied
Funktioniert schon ganz gut :D . Nur eben nicht wenn das Script per . aufgerufen wird und nicht im Pfad liegt. ich dachte es gibt in der bash eine simple Methode (so a la basename und dirname) um den Ausführungspfad eines Scripts herauszubekommen.
 

prinzunix

Hacker
Eventuell mit find (dauert laaaaange) und dann die gefundenen Ergebnisse mit einem Testparameter aufrufen.

Code:
/home/prinzunix/Desktop/tst.sh test

Wenn dann ein festgelegter Rückgabewert kommt, dann ist der richtige Eintrag gefunden.
Der Test, weil es mehrere Scripte mit gleichem Namen geben könnte.

Hmm. :? Nicht wirklich sinnvoll.
 
oc2pus schrieb:
ok, das gibt den Pfad vom Aufruf ...
schau mal hier:
http://www.issociate.de/board/post/285661/Bash_script_own_path.html
Re: Bash script own path
>How does a script find its own path?
>$PWD gives me the path from which it is run...
# error checking omitted
PROGNAME=`basename $0` # strip of path
PROGDIR=`dirname $0`
Viel einfacher... ohne noch einen Shell- und basename/dirname-Prozess aufmachen zu müssen
Code:
progname="${0##*/}";
mypath="${0%/*}";
 
OP
framp

framp

Moderator
Teammitglied
Das Problem dass ein Aufruf mit . nicht geht wenn das Script nicht im Pfad liegt ist bei mir nicht relevant.

Code:
MYSELF="${0##*/}"
MYDIR="${0%/*}"
RESULT="${MYDIR}/${MYSELF/.sh/}.out"

löst mein Problem.

Thx für die guten Hinweise :D
 
OP
framp

framp

Moderator
Teammitglied
Habe noch ein wenig im Netz gesucht und http://www.kclee.de/clemens/unix/ClemensLinuxFAQ.html gefunden.

Dort wird folgendes vorgeschlagen:

Code:
PRG_DIR=`dirname $0` # e.g. ../clesh/bin
OLD_PWD=`pwd`
cd $PRG_DIR
PRG_DIR=`pwd`
cd $OLD_PWD
echo $PRG_DIR # e.g. /usr/local/java/clesh/bin

Funktioniert perfekt.
 
Oben