Nun, das ist ein seltsames Problem, ich habe diese Art von Skript:
CWD="$(cd -P -- "$(dirname -- "$0")" && pwd -P)"
RESOURCES_PATH="${CWD}/resources"
PROJECT_NAME="something"
DRUSH_ALIASES_EXAMPLE_PATH="${RESOURCES_PATH}/example.aliases.drushrc.php"
DRUSH_ALIASES_PATH="~/.drush/${PROJECT_NAME}.aliases.drushrc.php"
cp ${DRUSH_ALIASES_EXAMPLE_PATH} ${DRUSH_ALIASES_PATH}
echo "cp ${DRUSH_ALIASES_EXAMPLE_PATH} ${DRUSH_ALIASES_PATH}"
Wenn ich versuche, diese Art von Skript auszuführen, wird folgende Fehlermeldung angezeigt: "cp: Es kann keine reguläre Datei" ~ / .drush / Something.aliases.drushrc.php "erstellt werden. Es gibt keine solche Datei oder kein solches Verzeichnis."
Aber das Lustige ist, dass der Befehl einwandfrei funktioniert, wenn ich die Ausgabe von "echo" kopiere und direkt in das Terminal einfüge. Ich bin verwirrt, irgendwelche Ideen, was mit dem obigen Skript falsch sein kann?
~
es nicht erweitert wird, wenn es zitiert wird. Natürlich sollten auch die Argumentecp
angeführt werden, um Überraschungen zu vermeiden.~/"quoted name"
wird auch funktionieren.Das Tilde-
~
Zeichen für das Home-Verzeichnis funktioniert nur am Anfang eines Wortes, am Anfang eines zugewiesenen Werts oder (für die Zwecke der PATH-Zuweisung) nach einem Doppelpunkt in einem zugewiesenen Wert. Es darf nicht zitiert werden.Da
~
durch die Shell erweitert wird, bedeutet die Tatsache, dass Sie es gemeldet sehencp
, dass Sie ein Shell-Erweiterungsproblem haben.Hier steht die Tilde in doppelten Anführungszeichen, daher wird sie nicht erweitert. Verwenden Sie eine der folgenden Methoden:
quelle
Mit können
bash
Sie auch die interne Zeichenfolgensubstitution über die Parametererweiterung verwenden , um das Tilde-Zeichen~
durch den Wert von zu ersetzen$HOME
.Nicht sehr elegant, kann aber nützlich sein, wenn Sie sich über ein mögliches
~
Zeichen in einer an Sie übergebenen Dateipfadzeichenfolge nicht sicher sind (hier nicht der Fall).quelle