Ist es möglich, Bash-Escape-Spaces in pwd zu haben?

Ich möchte das aktuelle Verzeichnis in die Zwischenablage kopieren, etwa so: pwd | pbcopy. Entgeht pwdjedoch nicht dem Leerzeichen, sodass beispielsweise etwas in "Application Support" nicht korrekt kopiert wird. Ich kann mich nicht erinnern, dass dies immer der Fall war, also könnte ich etwas gebumst haben. Mit iTerm2.

Gibt es eine Bash-Einstellung, um alles zu entkommen? Probleme bei der Suche, zu viele Fragen/Themen zu Spaces.app oder esc.

Aktuell:

$ pwd
/Library/Application Support/Google Earth/

Bevorzugt:

$ pwd
/Library/Application\ Support/Google\ Earth/

Bereits gesehene Beiträge: Kopieren des Pfads des aktuellen Verzeichnisses in die Zwischenablage und Wie cd man in ein Verzeichnis mit einem Namen, der Leerzeichen in Bash enthält? , die darauf nicht eingehen. Ich hätte im ersteren einen Kommentar abgegeben, aber ich habe nicht die Privilegien.

Ich bezweifle, dass die Kopie korrekt ist - Sie möchten, dass das Einfügen mit Leerzeichen umgeht - in welche App fügen Sie ein?
Tolle Frage. Sie werden bald genug Repräsentanten haben, um zu kommentieren. Willkommen auf der Seite!
pwd | pbcopyFunktioniert bei mir im Terminal einwandfrei. Finder/Bearbeiten/Zwischenablage anzeigen bestätigt, dass es in Ordnung ist.
@lhf Ja, hätte das Terminal einchecken sollen, was so funktioniert, wie Sie es angegeben haben. Kein Glück in iTerm2, obwohl. Vielleicht sollte ich wieder wechseln...
Wie kann dies von dem Terminalemulator abhängen, den Sie ausführen? Ich habe gerade getestet und pwd | pbcopyfunktioniert gut in iTerm2.
@lhf ja, Rohrleitungen zum Kopieren, es funktioniert. Ich habe es versäumt, den Kern des Problems zu erklären: cd `pbpaste`Gibt mir ein Leerzeichen ohne Escapezeichen und cderkennt daher das Verzeichnis nicht. Und Sie haben Recht, der Terminalemulator spielt keine Rolle. Ich weiß nicht, was ich vorher gedacht habe, weil es im Terminal nicht besser funktioniert. Muss kein Leerzeichen gehabt haben.
Grenwar, siehe meine Antwort unten. Kurz gesagt, fügen Sie einfach doppelte Anführungszeichen hinzu:cd "`pbpaste`"
Die Verwendung von einfachen Anführungszeichen für Zeichenfolgenliterale scheint die beste Lösung zu sein. Ich verstehe nicht, warum echo \'$(pbpaste)\'dies nicht funktionieren würde.
Ok, ich habe eine bessere Frage, was ist der Grund für die Verwendung von pwd |pbcopy? Ich bin mir zu 98% sicher, dass es eine bessere Lösung gibt.
Ihr Fragename und die Frage sind nicht gleich, ich habe die Frage beantwortet "Ist es möglich, Bash-Escape-Spaces in pwd zu haben?" Bitte bearbeiten Sie entweder die Frage oder ihren Namen.

Antworten (3)

Dieser Befehl wird Leerzeichen richtig maskieren:

printf "%q\n" "$(pwd)" | pbcopy

Sie können es mit etwas mit Geschichte aliasieren cwd, wenn es Ihnen nichts ausmacht, eine andere cwd neu zu definieren

alias cwd='printf "%q\n" "$(pwd)" | pbcopy'

Verwerfen Sie die Pipe zu pbcopy, wenn Sie möchten, dass es eher wie pwd funktioniert, und drucken Sie einfach den Escape-Pfad aus.


Oder um das pwd zu drucken und es gleichzeitig in die Zwischenablage zu kopieren, verwenden Sie teeund eine Ausgabeprozesssubstitution:

alias cwd='printf "%q\n" "$(pwd)" | tee >(pbcopy)'
funktioniert nicht auf mac
Funktioniert auf meinem Mac.
pwd | sed 's/ /\\ /g'

Aber ich bin mir nicht sicher, ob dies Ihr Problem letztendlich beheben wird. pbcopy kopiert genau das, was es auf stdin empfängt.

Dadurch werden nur Leerzeichen entkommen, was bei weitem nicht ausreicht, obwohl das OP dies als Beispiel verwendet hat.
aber das funktioniert in den meisten fällen das richtige von glenn hat auf meinem mac nicht geklappt, es gibt überhaupt keine ausgabe
Sie können es auch als Alias ​​verwenden, wenn Sie eine Funktion deklarieren: function escapePWD() { pwd | sed 's/ /\\ /g'; } und verwenden Sie dies für den Alias: alias epwd='escapePWD'

Es gibt keine integrierte Möglichkeit, pwdDateipfade mit Escapezeichen auszugeben, da dies im Allgemeinen nicht nützlich ist.

Es ist nicht sinnvoll , pwdBackslashes pbcopyzu dem, was kopiert wird, hinzuzufügen. Wenn Sie den Pfad in eine Textdatei oder einen Webbeitrag kopieren möchten, möchten Sie keinen umgekehrten Schrägstrich einfügen.

Wahrscheinlich möchten Sie einen separaten Alias ​​erstellen, z. B. qwd, um die in Anführungszeichen gesetzte Form des aktuellen Verzeichnisses zu drucken, oder einfach die Ausgabe von maskieren pbpaste, was so einfach ist wie das Setzen in doppelte Anführungszeichen:

bash-3.2$ pwd
/Users/user
bash-3.2$ cd test\ dir/untitled\ \"folder/
bash-3.2$ pwd
/Users/user/test dir/untitled "folder
bash-3.2$ pwd | pbcopy
bash-3.2$ echo "`pbpaste`"
/Users/user/test dir/untitled "folder
bash-3.2$ cd
bash-3.2$ pwd
/Users/user
bash-3.2$ cd `pbpaste`
bash: cd: /Users/user/test: No such file or directory
bash-3.2$ cd "`pbpaste`"
bash-3.2$ pwd
/Users/user/test dir/untitled "folder

Beachten Sie, dass nicht nur Leerzeichen maskiert werden müssen. Schrägstriche, Schrägstriche, Stern, Fragezeichen, kaufmännisches Und, Semikolon und andere Zeichen müssen ebenfalls maskiert werden. Am sichersten ist es, einfach doppelte Anführungszeichen wie im Beispiel zu verwenden, was auch dann funktioniert, wenn der Pfad doppelte Anführungszeichen enthält.

Wenn Sie es pervers angehen wollen, können Sie AppleScript dazu bringen, das aktuelle Verzeichnis für Sie zu zitieren:

bash-3.2$ alias qwd="osascript -e 'return quoted form of POSIX path of (POSIX file \"./\" as alias)'"
bash-3.2$ qwd
'/Users/user/test dir/untitled "folder'

Ansonsten stimme ich Glenn größtenteils zu, außer, wie oben, würde ich die zitierte Form qwdals Alias ​​verwenden, um das Normale nicht zu stören pwd:

alias qwd='printf "%q\n" "$(pwd)"'