Ich verwende Ubuntu und versuche zu installierenDasPython-Paket über Anaconda. Ich habe die Schritte wie im Link beschrieben befolgt und wenn ich cp -Ri $THIS_DIR/PackageFiles/Scripts $CMDIR
(ab Zeile 59) tippe, erhalte ich:
cp: invalid option -- 'h'
Was ist der Grund und wie kann ich das Problem beheben?
BEARBEITEN: Die Ausgaben von echo $THIS_DIR
und echo $CMDIR
sind jeweils dirname -bash
und /home/myusername/cellmodeller
.
Antwort1
Ein paar Dinge: Wenn THIS_DIR
enthält dirname -bash
, cp -Ri $THIS_DIR/...
wird es zum Äquivalent von erweitert cp -Ri dirname -bash/...
(aufgrund der Worttrennung), d. h., es cp
erhält dirname
und -bash/...
als unterschiedliche Argumente. Das zweite beginnt mit einem Bindestrich, daher versucht es, die Buchstaben darin als Optionen zu interpretieren. GNU cp hat dies nicht -h
als Option, daher gibt es einen Fehler aus.
Sie könnten die Aufteilung mit Anführungszeichen verhindern, aber das bedeutet nicht viel, da Sie wahrscheinlich kein Verzeichnis dirname -bash
mit dem entsprechenden Leerzeichen usw. haben.
Betrachtet man das Skript, THIS_DIR
wird eingestellt über
THIS_DIR="`dirname $0`"
Beachten Sie die Backticks. Sie starten eine Befehlsersetzung und führen den dirname
Befehl aus. Wenn Sie sie entfernen, wird eine Literalzeichenfolge dirname ...
zugewiesen.
Dann wiederum $0
ist es der Name der laufenden Shell oder des laufenden Skripts. Das Skript verwendet diesen Befehl wahrscheinlich, um herauszufinden, wo sich das Skript selbst befindet, z. B. den Pfad, /foo/bar
wenn Sie ausgeführt haben /foo/bar/scriptname.sh
. Aber in einer normalerweise gestarteten interaktiven Shell $0
enthält es wahrscheinlich nur bash
, oder -bash
es handelt sich um eine Login-Shell.
Wie cutrightjm in den Kommentaren sagte, soll dieses Skript als Skript ausgeführt werden und nicht als Befehle, die einzeln in das Terminal kopiert werden. (Die Erweiterungen könnten trotzdem in Anführungszeichen gesetzt werden.)
Natürlich können Sie die Zuweisung THIS_DIR
im Skript ändern oder es vor der Ausführung anderweitig modifizieren.