Ist es möglich, Bash-Escape-Räume in pwd zu haben?

21

Ich möchte das aktuelle Verzeichnis in die Zwischenablage kopieren pwd | pbcopy. Entkommt pwdjedoch nicht dem Leerzeichen, so dass etwas in "Anwendungsunterstützung" beispielsweise nicht korrekt kopiert wird. Ich scheine mich nicht daran zu erinnern, dass dies immer der Fall war, also hätte ich etwas falsch machen können. ITerm2 benutzen.

Gibt es eine Bash-Einstellung, um alles zu entkommen? Probleme beim Suchen, 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 Sie den Pfad des aktuellen Verzeichnisses in die Zwischenablage und wie Sie eine CD in ein Verzeichnis mit einem Namen mit Leerzeichen in Bash? , die dies nicht ansprechen. Ich hätte einen Kommentar im ersteren gemacht, aber ich habe nicht die Privilegien.

greenwar
quelle
1
Ich bezweifle, dass die Kopie korrekt ist. Was Sie wollen, ist das Einfügen, um mit Leerzeichen umzugehen. In welche App fügen Sie sie ein?
user151019
Gute Frage. Du wirst bald genug Wiederholung haben, um Kommentare abzugeben. Willkommen auf der Seite!
bmike
1
pwd | pbcopyfunktioniert gut für mich im Terminal. Finder / Edit / Show Clipboard bestätigt, dass es in Ordnung ist.
Uhr
@lhf Ja, sollte im Terminal eingecheckt haben, was wie von Ihnen angegeben funktioniert. Kein Glück in iTerm2. Vielleicht sollte ich zurückwechseln ...
greenwar
Wie kann dies von dem Terminalemulator abhängen, den Sie ausführen? Ich habe gerade getestet und pwd | pbcopyfunktioniert gut in iTerm2.
lhf

Antworten:

13

Dieser Befehl wird Leerzeichen richtig entziehen:

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

Sie können es mit etwas mit Geschichte aliasen,cwd wenn Sie nichts dagegen haben, ein anderes cwd neu zu definieren

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

Werfen Sie die Pipe in pbcopy, wenn Sie möchten, dass sie mehr wie pwd funktioniert, und drucken Sie einfach den entkommenen Pfad aus.

Glenn Jackman
quelle
funktioniert nicht auf Mac
Macilias
1
Funktioniert auf meinem Mac.
Jason Swett
5
pwd | sed 's/ /\\ /g'

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

Kennzeichen
quelle
Das wird nur Leerzeichen entgehen, was bei weitem nicht ausreicht, obwohl das OP dies als Beispiel genommen hat.
Old Pro
aber das funktioniert in den meisten fällen, die richtige von glenn hat auf meinem mac nicht funktioniert, es gibt überhaupt keine ausgabe
macilias
Sie können es auch als Alias ​​verwenden, wenn Sie eine Funktion deklarieren: function escapePWD () {pwd | sed 's / / \\ / g'; } und benutze dies als Alias: alias epwd = 'escapePWD'
Macilias
1

Es gibt keine integrierte Möglichkeit, pwdPfade für Ausgabedateien zu erstellen, da dies im Allgemeinen nicht hilfreich ist.

Es macht Sinn , nicht für pwdoder pbcopyzu Hinzufügen Schrägstriche zu dem, was kopiert wird. Wenn Sie den Pfad in eine Textdatei oder einen Webpost kopieren möchten, möchten Sie keinen Backslash einfügen.

Was Sie wahrscheinlich tun möchten, ist, einen separaten Alias ​​zu erstellen, z. B. qwdum die zitierte Form des aktuellen Verzeichnisses zu drucken, oder einfach die Ausgabe von zu umgehen pbpaste, was so einfach ist, als würde man sie in doppelte Anführungszeichen setzen:

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. Vorwärts- und Rückwärtsschrägstriche, Stern, Fragezeichen, kaufmännisches Und, Semikolon und andere Zeichen müssen ebenfalls ausgeblendet werden. Am sichersten ist es, doppelte Anführungszeichen wie im Beispiel zu verwenden, was auch dann funktioniert, wenn der Pfad doppelte Anführungszeichen enthält.

Wenn Sie pervers sein wollen, können Sie AppleScript veranlassen, 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, mit der Ausnahme, dass ich, wie oben beschrieben, die angeführte Form qwdals Alias ​​verwenden würde , um das Normale nicht zu beeinträchtigen pwd:

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