2013-11-04 6 views
6

Ich habe ein Skript wie folgt:Anruf eines Shell-Skript aus einem anderen Skript mit relativen Pfaden

#!/bin/csh 
echo "This is the main programme" 
./printsth 

ich das Skript aus diesem Skript mit relativen Pfaden anrufen möge. Gibt es einen Weg dazu? Mit relativen Pfaden meine ich Pfad relativ zu dem, wo mein Aufrufskript ist.

+1

Warum denkst du, dass das nicht funktioniert? Lerne, dein Shell-Debugging zu aktivieren, zB 'set -vx' (oder ähnlich für csh) UND' echo $ cwd' usw., um zu sehen, wo du bist. Viel Glück. – shellter

Antwort

4

Sie können auf das aktuelle Arbeitsverzeichnis mit $cwd verweisen. Wenn Sie also mit einem Pfad relativ zum aktuellen Arbeitsverzeichnis aufrufen möchten, starten Sie die Zeile mit $cwd.

Zum Beispiel, wenn Sie die im aktuellen Verzeichnis anrufen wollen, sagen:

$cwd/../printsth 

Seien Sie sicher, dass es ein:

$cwd/printsth 

Wenn Sie das ein Verzeichnis über anrufen möchten csh Skript obwohl (dh die erste Zeile ist #!/bin/csh). Wenn es sich um ein sh oder bash Skript handelt, müssen Sie $PWD (für 'vorhandenes Arbeitsverzeichnis') verwenden, nicht $cwd.

EDIT:

Wenn Sie ein Verzeichnis in Bezug auf das Verzeichnis des Skript möchten, nicht das aktuelle Verzeichnis arbeiten, dann können Sie dies tun:

setenv SCRIPTDIR `dirname $0` 
$SCRIPTDIR/printsth 

Das $SCRIPTDIR in das gleiche Verzeichnis wie die eingestellt wird ursprüngliches Skript. Sie können dann Pfade relativ dazu erstellen.

+0

können Sie dies ohne Verwendung von $ cwd und $ pwd tun – Programmer

+0

Nun, eigentlich ist der Standard für 'csh', das aktuelle Arbeitsverzeichnis irgendwie zu verwenden, so'./Printsth 'wird sowieso in CWD aussehen. Wenn Sie im selben Verzeichnis wie das ursprüngliche Skript suchen möchten, ist das eigentlich ein bisschen schwieriger. Was willst du? –

+0

Ich möchte im selben Verzeichnis wie orig script schauen – Programmer

0

Laufendes Skript wie ./printsth wird nicht immer funktionieren, da der relative Pfad von dem Verzeichnis abhängt, aus dem das Hauptskript ausgeführt wurde.

Eine Lösung wäre, um sicherzustellen, dass wir das Verzeichnis ein, in dem das Skript vorhanden ist, dann ist es laufen:

cd -P -- "$(dirname -- "$0")" 
./printsth 

Weitere Beispiele finden Sie unter: How to set current working directory to the directory of the script?

Siehe auch: How to convert absolute path into relative path?