Чи можливо мати пробіли для втечі в pwd?


21

Я хотів би, щоб скопіювати поточний каталог в буфер обміну, що - щось на кшталт: pwd | pbcopy. Однак pwdце не уникає місця, тому щось із "Підтримки програм", наприклад, не копіюється правильно. Я, здається, не пам’ятаю, що це завжди було так, тому я міг би щось пограбувати. Використання iTerm2.

Чи є налаштування башти, щоб уникнути всього? не вдається знайти, занадто багато питань / тем про Spaces.app або esc.

Поточний:

$ pwd
/Library/Application Support/Google Earth/

Кращі:

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

Вже побачені публікації: Копіювання шляху поточного каталогу до буфера обміну та Як CD в каталог із ім'ям, що містить пробіли в bash? , які не звертаються до цього. Я б прокоментував це раніше, але у мене немає привілеїв.


1
Я сумніваюся, що копія правильна - вам потрібно вставити папір для пробілів - у яке додаток ви вставляєте?
користувач151019

Чудове запитання. Незабаром у вас з’явиться достатня кількість коментарів для коментарів. Ласкаво просимо на сайт!
bmike

1
pwd | pbcopyдобре працює для мене в Терміналі. Finder / Edit / Show Clipboard підтверджує, що це нормально.
lhf

@lhf Так, слід було перевірити термінал, який працює, як ви заявили. Однак, в iTerm2 не пощастило. Можливо, я повинен переключитися назад ...
greenwar

Як це може залежати від емулятора термінала, який ви працюєте? Я щойно перевірив і pwd | pbcopyпрацює в iTerm2.
lhf

Відповіді:


13

Ця команда буде правильно виводити пробіли:

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

Ви можете його псевдонімом використовувати, використовуючи щось із історії, наприклад, cwdякщо ви не заперечуєте за повторним визначенням іншого диска

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

Викопайте трубу в pbcopy, якщо ви хочете, щоб вона працювала більше як pwd та просто роздрукувала шлях, що вийшов.


не працює на mac
Macilias

1
Працює на моєму Mac.
Джейсон Світт

5
pwd | sed 's/ /\\ /g'

Але я не впевнений, що це врешті вирішить вашу проблему. pbcopy копіює саме те, що отримується на stdin.


Це дозволить уникнути простору, чого майже не вистачає, хоча саме ОП використовував це як приклад.
Старий Про

але це працює в більшості випадків, а належне від glenn не вийшло на моєму комп'ютері, а виходу взагалі немає
Macilias

Ви також можете використовувати його як псевдонім, коли оголошуєте функцію: function escapePWD () {pwd | sed 's / / \\ / g'; } і використовувати це для псевдоніму: alias epwd = 'escapePWD'
Macilias

1

Немає вбудованого способу зробити pwdвихідні шляхи до файлів, оскільки це, як правило, не корисно.

Немає сенсу pwdабо pbcopyдодавати зворотні риски в те, що скопійовано. Якщо ви хотіли скопіювати шлях у текстовий файл або веб-допис, ви не хочете, щоб у нього було вставлено звороту косу рису.

Можливо, те, що ви хочете зробити, - це створити як окремий псевдонім, як-от qwdнадрукувати цитовану форму поточного каталогу, або просто вийти з виводу pbpaste, що так само просто, як розмістити його у подвійних лапках:

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

Зауважте, що не лише пробіли потребують втечі. Нахили вперед і назад, зірка, знак питання, амперсанда, напівкрапка та інші символи також потребують втечі. Найбезпечнішим є лише використання подвійних лапок, як у прикладі, які працюватимуть, навіть якщо шлях включає в себе подвійні лапки.

Якщо ви хочете бути збоченими з цього приводу, ви можете змусити AppleScript цитувати поточний каталог для вас:

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'

Інакше я здебільшого погоджуюся з Гленном, за винятком вищезазначеного, я б псевдонімом цитував форму, щоб qwdне заважати нормальному pwd:

alias qwd='printf "%q\n" "$(pwd)"'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.