Frage BASH-Skript, um in ein Verzeichnis mit Leerzeichen im Pfadnamen zu wechseln


Argggg. Ich habe tagelang mit diesem dummen Problem gekämpft und kann keine Antwort finden.

Ich verwende BASH unter Mac OS X und möchte eine einfache ausführbare Skriptdatei erstellen, die bei der Ausführung in ein anderes Verzeichnis geändert wird. Der Pfad zu diesem Verzeichnis enthält jedoch Leerzeichen. Wie zum Teufel machst du das? Das ist was ich habe ...

Name der Datei: CD-Code

Datei Inhalt: cd ~/My Code

Nun gewährt, das ist kein langer Pfadname, aber mein tatsächlicher Pfadname ist fünf Verzeichnisse tief und vier dieser Verzeichnisse haben Leerzeichen im Pfad.

BTW, ich habe es versucht cd "~/My Code" und cd "~/My\ Code" und keiner von beiden hat funktioniert.


76
2018-02-26 04:50


Ursprung


Antworten:


Wenn Sie einen Pfad doppelt zitieren, stoppen Sie die Tilde-Erweiterung. Also gibt es ein paar Möglichkeiten, dies zu tun:

cd ~/"My Code"
cd ~/'My Code'

Die Tilde wird hier nicht angegeben, daher wird die Tilde-Erweiterung weiterhin ausgeführt.

cd "$HOME/My Code"

Sie können Umgebungsvariablen in Strings in doppelten Anführungszeichen erweitern. Das ist im Grunde die Tilde-Erweiterung

cd ~/My\ Code

Sie können Sonderzeichen (z. B. Leerzeichen) auch mit einem umgekehrten Schrägstrich versehen.


68
2018-02-26 05:23



Hallo! Ich habe das gesehen http://www.askdavetaylor.com/can_my_path_include_directory_names_with_spaces.html

x = "test \ mich"
eval cd $ x

Eine Kombination aus \ in einer Konstanten mit doppeltem Anführungszeichen und "eval" vor "cd" macht es wie ein Zauber!


28
2018-06-13 15:52



Sie können Folgendes verwenden:

cd ~/"My Code"
cd ~/M"y Code"
cd ~/My" Code"

Sie können nicht verwenden:

cd ~"/My Code"

Das erste funktioniert, weil die Shell ~ / in $ HOME / expandiert und dann auf "Mein Code" ohne die Anführungszeichen klickt. Der zweite Fehler tritt auf, weil kein Benutzer namens '"'(Doppelzitat) für ~" zuordnen zu.


7
2018-02-26 05:22



cd ~/My\ Code

scheint für mich zu funktionieren ... Wenn Sie die Anführungszeichen löschen, aber den Schrägstrich nicht verwenden, können Sie einen Beispielcode posten?


6
2018-02-26 04:55



Ein einzelner Backslash funktioniert für mich:

ry4an@ry4an-mini:~$ mkdir "My Code"

ry4an@ry4an-mini:~$ vi todir.sh

ry4an@ry4an-mini:~$ . todir.sh 

ry4an@ry4an-mini:My Code$ cat ../todir.sh 
#!/bin/sh
cd ~/My\ Code

Sind Sie sicher, dass das Problem nicht darin besteht, dass Ihr Shell-Skript das Verzeichnis in seiner Subshell ändert, aber dann sind Sie wieder in der Haupt-Shell (und dem ursprünglichen Verzeichnis), wenn Sie fertig sind? Ich habe das vermieden, indem ich benutzt 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 Ablenkungsmanöver sein.


4
2018-02-26 04:57



Wenn Sie unter Linux arbeiten, ist die folgende Syntax richtig:

cd ~/My\ Code

Verwenden Sie beim Ausführen der Datei die folgende Syntax:

$ . cdcode

(nur '.' und nicht './')


2
2018-02-26 05:02



Vermeiden Sie ~ in Skripten; Verwenden Sie stattdessen $ HOME.


2
2018-06-10 06:06



Der einfachste Weg, dies zu tun ist -

 $ cd My\ Folder

Führen Sie in der bash den Befehl DIR aus, und in den Ergebnissen sehen Sie, dass die Ordner- oder Pfadnamen, die Leerzeichen zwischen ihnen enthalten, in den Ergebnissen wie folgt geschrieben wurden:

$dir
My\ Folder
New\ Folder

2
2018-04-28 10:04



Nachdem ich mit demselben Problem gekämpft habe, habe ich zwei verschiedene Lösungen ausprobiert, die funktionieren:

  • Lösung1: Am einfachsten zitiert man einfach die Variablen wie in der vorherigen Antwort angegeben cd "$yourPathWithBlankSpace"
  • Solution2: Nach dieser Antwort Unix-Befehl, um Leerzeichen zu vermeiden Sie können Leerzeichen entfernen und dann Eval wie folgt verwenden:

yourPathEscaped=$(printf %q "$yourPathWithBlankSpace") + eval cd $yourPathEscaped


2
2017-12-03 10:43



Ich hatte jetzt ein ähnliches Problem, als ich ein Bash-Skript benutzte, um einige Daten zu löschen. Am Ende habe ich einen symbolischen Link im Skriptordner erstellt, in dem keine Leerzeichen enthalten sind. Ich zeigte dann mein Skript auf den symbolischen Link und das funktioniert gut.

Um deine Verbindung herzustellen. ln -s [ZIELVERZEICHNIS ODER -DATEI] ./[SHORTCUT]

Mau oder kann nicht von Nutzen sein.


1
2018-05-13 09:20



Verwenden Sie doppelte Anführungszeichen

go () 
{ 
    cd "$*"
}

1
2018-05-15 15:31