Чи можливо мати пробіли для втечі в 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.