13 Stimmen

OS X bash: dirname

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

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

Ich bekomme

usage: dirname path

Ich habe auch versucht, Anführungszeichen an allen möglichen Stellen zu setzen. Das aufwändigste Beispiel ist

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

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

Welche anderen Methoden gibt es, die funktionieren könnten?


Bearbeiten: Das scheint für niemanden außer mir ein Problem zu sein, also muss es nur an meiner Box liegen. Ich werde meinen eigenen Beitrag unten akzeptieren, weil es die einzige Lösung ist, die für dieses spezielle Problem funktioniert hat. Allerdings bin ich auf jeden Fall upvoting die Lösungen, die für alle anderen zu arbeiten scheinen und wirklich schätzen jedermanns Hilfe.

14voto

Sean Bright Punkte 114347

Worüber?

cd "$(dirname "$0")"

Das funktioniert für mich hier.

6voto

Ned Deily Punkte 81039
#!/bin/sh
cd "$(dirname "$0")"

4voto

Dinah Punkte 50664

Was bei mir schließlich funktioniert hat, ist, dies zu ändern:

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

Zu diesem:

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

Dies unterstützt auch Dateinamen und Dateipfade, die Leerzeichen enthalten. Hier habe ich es gefunden: http://rentzsch.com/unix/locationAwareCommandFiles

3voto

pimlottc Punkte 2886

Das Auslassen der inneren Anführungszeichen ist unnötig:

cd "`dirname "$0"`"

Aber das geht nicht an die Wurzel des Problems, das darin besteht, dass der Wert von $0 irgendwie leer zu sein scheint, oder vielleicht etwas Seltsames. Versuchen Sie, Ihr Skript auf diese Weise zu ändern:

bash -x scriptname

Damit wird jede Zeile mit interpolierten Variablen als Echo ausgegeben, bevor sie ausgeführt wird. Dies ist sehr nützlich für die Fehlersuche. Ebenfalls sehr hilfreich sind:

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

1voto

sixtyfootersdude Punkte 24574

Hey, ich bin mir nicht sicher... Aber ist es möglich, dass deine

#!/bin/sh 

Zeigt auf etwas, das nicht bash ist? Was ich normalerweise verwende ist:

#!/usr/bin/bash

Ich bin ziemlich neu in der ganzen Skripting-Sache und daher nicht sicher.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X