Возможно ли иметь пробелы в bash в pwd?

21

Я хотел бы, чтобы скопировать текущий каталог в буфер обмена, что - то вроде: pwd | pbcopy. Тем pwdне менее, не освобождает место, поэтому что-то в «Поддержка приложений», например, не копирует правильно. Кажется, я не помню, чтобы это всегда имело место, поэтому я мог что-то обмануть. Использование iTerm2.

Есть ли настройка bash, чтобы избежать всего? возникли проблемы с поиском, слишком много вопросов / тем о Spaces.app или esc.

Ток:

$ pwd
/Library/Application Support/Google Earth/

Предпочтительно:

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

Уже просмотренные сообщения: Копирование пути текущего каталога в буфер обмена и Как перейти в каталог с именем, содержащим пробелы в bash? , которые не обращаются к этому. Я бы сделал комментарий в первом, но у меня нет привилегий.

greenwar
источник
1
Я сомневаюсь, что копия верна - что вы хотите, чтобы паста имела дело с пробелами - в каком приложении вы вставляете?
user151019
Отличный вопрос У вас скоро будет достаточно репутации, чтобы комментировать. Добро пожаловать на сайт!
bmike
1
pwd | pbcopyу меня нормально работает в Терминале. Finder / Edit / Show Clipboard подтверждает, что все в порядке.
LHF
@lhf Да, надо было проверить в Терминале, который работает, как вы заявили. Не повезло в iTerm2, хотя. Может быть, я должен вернуться ...
Greenwar
Как это может зависеть от эмулятора терминала, который вы используете? Я только что проверил и pwd | pbcopyотлично работает в iTerm2.
LHF

Ответы:

13

Эта команда будет корректно экранировать пробелы:

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

Вы можете использовать псевдоним, используя что-то с историей, например, cwdесли вы не против переопределения другого cwd

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

Отключите канал от pbcopy, если вы хотите, чтобы он работал больше как pwd, и просто распечатайте экранированный путь.

Гленн Джекман
источник
не работает на Mac
Macilias
1
Работает на моем Mac.
Джейсон Светт
5
pwd | sed 's/ /\\ /g'

Но я не уверен, что это в конечном итоге решит вашу проблему. pbcopy копирует именно то, что получает на stdin.

отметка
источник
Это будет выходить только из пробелов, которых недостаточно, хотя это то, что OP использовал в качестве примера.
Старый Про
но в большинстве случаев это работает, но на моем Mac не сработало то, что
нужно от glenn,
Вы также можете использовать его как псевдоним, когда объявляете функцию: 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)"'
Old Pro
источник