Ich versuche, mein Arbeitsverzeichnis mit einem korrekten Verzeichnis zu vergleichen, aus dem das Skript ausgeführt werden muss. Hier ist ein Ausschnitt des Shell-Skripts
CURR_DIR=echo pwd
echo $CURR_DIR
if [ "$CURR_DIR" == "/proj/project_a/scripts_shell" ]; then
echo "You are running script from correct directory"
fi
In diesem Fall habe ich sichergestellt, dass ich mich in /proj/project_a/scripts_shell (als meinem aktuellen Arbeitsverzeichnis) befinde, aber aus irgendeinem Grund kann dies in der if-Anweisung nicht erkannt werden. Daher wird die Meldung nicht gedruckt.
Was ist daran falsch?
Antwort1
Versuche dies:
if [ "$PWD" = "/proj/project_a/scripts_shell" ]; then
echo "You are running the script from the correct directory"
fi
Das Problem besteht darin CURR_DIR=echo pwd
, dass die Shell beim Aufrufen pwd
die Umgebungsvariable CURR_DIR
auf gesetzt hat echo
. Wenn Sie die Ausgabe eines Befehls in einer Variablen erfassen müssen, führen Sie einfach aus VAR=$(cmd)
.
Antwort2
Dies ist eine Notation zum Speichern des Befehlsergebnisses in einer Zeichenfolge in BASH
CURR_DIR=$(pwd)
oder
CURR_DIR=`pwd`
Wenn Sie CURR_DIR=echo pwd
das eingeben, wird CURR_DIR
nur eine "pwd"-Zeichenfolge erstellt. So funktioniert die Echo-Funktion. Führen Sie beispielsweise die folgende Zeile in Ihrer Shell aus
echo blah blah blah
dies hat keine Wirkung auf den Blabla-Befehl.