Sorry, wenn das eine blöde Frage ist, aber ich habe erfolglos danach gesucht.
Was genau macht die zweite Zeile?
#!/bin/sh
cd ${0%/*} || exit 1
Ich weiß, der erste ist der Schebang, der zweite versucht, das Verzeichnis zu wechseln, aber der verwirrende Teil ist ${0%/*}
.
Können Sie mir bitte diese zweite Zeile erklären?
command-line
sh
Navaro
quelle
quelle
dirname
Befehl wie folgt zu verwenden$(dirname $0)
dirname
eingebaut ist? Es ist sicherlich nicht in Bash v4.3.11, welches die Standard-Shell in Ubuntu Trusty ist.dirname
es sich nicht um eine eingebaute Shell handelt.Antworten:
${0}
ist das erste Argument des Skripts, dh der Name oder Pfad des Skripts. Wenn Sie Ihr Skript starten wiepath/to/script.sh
, dann${0}
wird genau diese Zeichenfolge:path/to/script.sh
.Das
%/*
Teil ändert den Wert von${0}
. Es bedeutet: Nehmen Sie alle Zeichen, bis/
ein Dateiname folgt. Im obigen Beispiel${0%/*}
wird seinpath/to
.Sie können es in Aktion auf Ihrer Shell sehen:
Sh unterstützt viele andere Arten der "Parametersubstitution". So nehmen Sie beispielsweise den Dateinamen anstelle des Pfads:
Im Allgemeinen
%
und%%
Strip-Suffixe, während#
und##
Strip-Präfixe. Sie können mehr über die Parametersubstitution lesen .quelle
|| exit 1
möglicherweise benötigt, dacd
es bei einem Fehler mit Status 2 und nicht mit 1 beendet werden kann. Ich stimme jedoch zu, dass es nicht sehr nützlich ist (normalerweise interessieren sich Programme nicht für bestimmte Exit-Status). Wahrscheinlich ist dies Teil eines größeren Skripts?