2009-08-20 13 views
7

Ich möchte ein einfaches Bash-Skript erstellen, um ein Java-Programm auf OS X zu starten. Die Namen der Datei, der Dateipfad und der unmittelbare Arbeitsordner enthalten alle Leerzeichen. Wenn ich dies tun:OS X Bash: Verzeichnisname

#!/bin/sh 
cd `dirname $0` 

ich

usage: dirname path 

Ich habe auch versucht Zitate in allen Arten von verschiedenen Orten setzen. Das aufwendigste Beispiel ist

cd "`dirname \"$0\"`" 

Nichts hat funktioniert. Ich erhalte entweder Fehlermeldungen oder die kryptische Nachricht "usage: dirname path".

Was sind andere Methoden, die funktionieren könnten?


Edit: scheint dies kein Problem für alle, aber ich zu sein, so dass es nur muss meine Box sein. Ich werde meinen eigenen Beitrag unten akzeptieren, weil es die einzige Lösung ist, die für dieses spezielle Problem funktioniert hat. Aber ich stimme definitiv den Lösungen zu, die für alle anderen funktionieren und die Hilfe von allen wirklich zu schätzen wissen.

+0

Was ergibt 'echo $ 0'? dirname hat möglicherweise ein Problem mit etwas Spezifischem über den Wert von $ 0.Haben Sie versucht, das Skript in einem anderen Verzeichnis auszuführen? – fbrereto

+0

Ihr zweites Beispiel funktioniert für mich mit einem sechs Ebenen tiefen Verzeichnis, in dem jeder andere Vorfahr mindestens ein Leerzeichen in seinem Namen hat. – Chuck

+0

jemals versuchen, auf die manpage von dirname zu schauen? –

Antwort

3

Was schließlich für mich gearbeitet wird diese Veränderung:

#!/bin/sh 
cd `dirname $0` 

Um dies:

#! /bin/zsh 
cd "${0:h}" 

Diese auch Dateinamen und Dateipfade mit Leerzeichen unterstützt. Hier ist, wo ich es gefunden: http://rentzsch.com/unix/locationAwareCommandFiles

+0

Nur neugierig - was ist mit meiner und Neds Lösung gescheitert? Ich würde gerne meine Antwort aktualisieren, wenn es für das Archiv geeignet ist. –

+1

Oh, ich verstehe. Z-Schale. Cool. –

+0

@Sean: Ich habe immer noch "usage: dirname path" bekommen. Ich denke, es hat etwas mit meiner Maschine zu tun. Aber diese z-Shell-Lösung hat für mich funktioniert. Seltsam. – Dinah

12

Was:

cd "$(dirname "$0")" 

Das hier funktioniert für mich.

5
#!/bin/sh 
cd "$(dirname "$0")" 
2

die inneren Anführungszeichen Flüchten ist nicht notwendig:

cd "`dirname "$0"`" 

Aber das an die Wurzel des Problems nicht bekommen, die das irgendwie ist der Wert von $ 0 scheint leer zu sein, oder vielleicht etwas Merkwürdiges. Versuchen Sie, Ihr Skript auf diese Weise zu ändern:

bash -x scriptname 

Dies wird jede Zeile mit interpolierten Variablen vor dem Ausführen echo. Es ist sehr nützlich für das Debuggen. Auch sehr hilfreich sind:

-u: abort on attempt to use undefined variable 
-e: abort on first error 
0

Hey nicht sicher darüber ... Aber ist es möglich, dass Ihre

#!/bin/sh 

Punkte auf etwas, das nicht einschlagen wird? Was ich normalerweise benutze ist:

#!/usr/bin/bash 

Ziemlich neu für die ganze Skript-Sache so nicht sicher.