Frage
Ich möchte ein einfaches Bash-Skript erstellen, ein Java-Programm unter OS X. Die Namen der Datei, den Dateipfad zu starten, und der unmittelbaren Arbeitsordner alle Leerzeichen enthalten. Wenn ich dies tun:
#!/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 entweder erhalten Fehlermeldungen oder dass kryptische „Nutzung: DIRNAME Pfad“ Nachricht
.Was gibt andere Methoden, die funktionieren könnte?
Edit: scheint dies kein Problem für jedermann, aber ich zu sein, so dass es nur meine Box sein muss. Ich werde meinen eigenen Beitrag unten akzeptieren, weil es die einzige Lösung, die für dieses spezielle Problem gearbeitet. Ich bin aber auf jeden Fall die Lösungen upvoting, die für alle anderen zu arbeiten scheinen und wirklich Hilfe schätzen jeden.
Lösung 3
Was schließlich für mich gearbeitet ändert sich dies:
#!/bin/sh
cd `dirname $0`
Um dies zu:
#! /bin/zsh
cd "${0:h}"
Dies unterstützt auch Dateinamen und Dateipfade Leerzeichen enthalten. Hier ist, wo ich es gefunden: http://rentzsch.com/unix/locationAwareCommandFiles
Andere Tipps
Was ist mit:
cd "$(dirname "$0")"
Das hier funktioniert für mich.
#!/bin/sh
cd "$(dirname "$0")"
die inneren Anführungszeichen Flüchten ist nicht notwendig:
cd "`dirname "$0"`"
Aber das geht nicht an die Wurzel des Problems, das ist, dass irgendwie der Wert von $ 0 scheint leer zu sein, oder vielleicht etwas seltsam. Versuchen Sie, läuft das Skript so aus:
bash -x scriptname
Dies wird jede Zeile Echo, mit Variablen interpoliert, bevor es ausgeführt wird. 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
Hey nicht sicher darüber ... Aber ist es möglich, dass Ihr
#!/bin/sh
verweist auf etwas, das nicht einschlagen wird? Was ich in der Regel verwenden:
#!/usr/bin/bash
Pretty neu in der ganzen Scripting Sache so nicht sicher.