Ich verwende Bash unter macOS X und möchte eine einfache ausführbare Skriptdatei erstellen, die beim Ausführen in ein anderes Verzeichnis geändert wird. Der Pfad zu diesem Verzeichnis enthält jedoch Leerzeichen. Wie zum Teufel machst du das? Das habe ich ...
Name der Datei: cdcode
Dateiinhalt:
cd ~/My Code
Zugegeben, dies ist kein langer Pfadname, aber mein tatsächlicher Pfadname ist fünf Verzeichnisse tief und vier dieser Verzeichnisse haben Leerzeichen im Pfad.
Übrigens, ich habe versucht , cd "~/My Code"
und , cd "~/My\ Code"
und keiner von ihnen arbeitete.
Antworten:
Wenn Sie einen Pfad in doppelte Anführungszeichen setzen, stoppen Sie die Tilde-Erweiterung. Es gibt also einige Möglichkeiten, dies zu tun:
Die Tilde wird hier nicht angegeben, daher wird die Tilde-Erweiterung weiterhin ausgeführt.
Sie können Umgebungsvariablen in Zeichenfolgen in doppelten Anführungszeichen erweitern. Dies ist im Grunde das, was die Tilde-Erweiterung tut
Sie können Sonderzeichen (z. B. Leerzeichen) auch mit einem Backslash maskieren.
quelle
Ich habe die Lösung unten auf dieser Seite gefunden :
Eine Kombination aus
\
einer doppelten Textkonstante und einemeval
Vorhercd
macht es wie ein Zauber!quelle
eval
.eval
.scheint für mich zu funktionieren ... Wenn das Löschen der Anführungszeichen, das Beibehalten des Schrägstrichs jedoch nicht funktioniert, können Sie einen Beispielcode veröffentlichen?
quelle
Sie können Folgendes verwenden:
Sie können nicht verwenden:
Das erste funktioniert, weil die Shell ~ / in $ HOME / erweitert und dann My Code ohne doppelte Anführungszeichen angreift. Der zweite Fehler schlägt fehl, da kein Benutzer namens '
"
' (doppeltes Anführungszeichen)~"
zum Zuordnen vorhanden ist.quelle
Nachdem ich mit demselben Problem zu kämpfen hatte, versuchte ich zwei verschiedene Lösungen, die funktionieren:
1. Verwenden Sie doppelte Anführungszeichen (
""
) für Ihre Variablen.Am einfachsten zitieren Sie Ihre Variablen einfach doppelt, wie in der vorherigen Antwort angegeben:
2. Nutzen Sie
eval
.Entsprechend dieser Antwort können Sie mit dem Unix-Befehl Leerzeichen entfernen, indem Sie Leerzeichen entfernen und dann
eval
wie folgt verwenden:quelle
Ein einziger Backslash funktioniert für mich:
Sind Sie sicher, dass das Problem nicht darin besteht, dass Ihr Shell-Skript das Verzeichnis in seiner Subshell ändert, aber wenn Sie fertig sind, befinden Sie sich wieder in der Haupt-Shell (und im ursprünglichen Verzeichnis)? Ich habe das vermieden, indem ich verwendet habe. um das Skript in der aktuellen Shell auszuführen, obwohl die meisten Leute nur einen Alias dafür verwenden würden. Die Räume könnten ein roter Hering sein.
quelle
Vermeiden Sie ~ in Skripten; Verwenden Sie stattdessen $ HOME.
quelle
Wenn Sie unter Linux arbeiten, ist die folgende Syntax richtig:
cd ~/My\ Code
Verwenden Sie jedoch beim Ausführen Ihrer Datei die folgende Syntax:
$ . cdcode
(nur '.' und nicht './')
quelle
Verwenden Sie doppelte Anführungszeichen
quelle
.bashrc
Datei zum Ändern des Verzeichnisses beim Einfügen von Verzeichnisnamen, die Leerzeichen enthalten, in die Befehlszeile, ohne dass Sie die Leerzeichen verlassen oder das Ganze zitieren müssen.cds
ist ein besserer Name.go
gleichwertig sein wirdcd
, das heißt, cd zu Home - Verzeichnis?Der sehr einfache Weg, dies zu tun, ist:
Führen Sie in bash den Befehl DIR aus, und in den Ergebnissen sehen Sie, dass die Ordner- oder Pfadnamen, zwischen denen ein Leerzeichen steht, in den Ergebnissen wie folgt geschrieben wurden:
quelle
Ich hatte jetzt ein ähnliches Problem, als ich ein Bash-Skript verwendete, um einige Daten zu sichern. Am Ende habe ich einen symbolischen Link im Skriptordner ohne Leerzeichen erstellt. Ich habe dann mein Skript auf den symbolischen Link gerichtet und das funktioniert gut.
So erstellen Sie Ihren Link. ln -s [ZIELVERZEICHNIS ODER DATEI] ./[SHORTCUT]
Mau oder möglicherweise nicht von Nutzen.
quelle
Dies wird es tun:
Ich musste das verwenden, um mit Dateien zu arbeiten, die im iCloud Drive gespeichert sind. Sie möchten keine doppelten Anführungszeichen (") verwenden, da dies ein absoluter Pfad sein muss. Mit anderen Worten, Sie können doppelte Anführungszeichen nicht mit Tilde (~) kombinieren.
Als Beispiel musste ich dies für ein aktuelles Projekt verwenden:
Ich hoffe das hilft.
quelle
Verwenden Sie einfache Anführungszeichen wie:
quelle