Я хотел бы скопировать текущий каталог в буфер обмена, например: pwd | pbcopy
. Однако pwd
не выходит за пробел, поэтому что-то в «Поддержке приложений», например, не копируется правильно. Кажется, я не помню, чтобы это всегда было так, поэтому я мог что-то напутать. Использование iTerm2.
Есть ли настройка bash, чтобы избежать всего? проблемы с поиском, слишком много вопросов/тем о Spaces.app или esc.
Текущий:
$ pwd
/Library/Application Support/Google Earth/
Предпочтительно:
$ pwd
/Library/Application\ Support/Google\ Earth/
Уже видели сообщения: Копирование пути к текущему каталогу в буфер обмена и Как перейти к каталогу с именем, содержащим пробелы в bash? , которые не касаются этого. Я бы сделал комментарий в первом случае, но у меня нет привилегий.
Эта команда будет правильно экранировать пробелы:
printf "%q\n" "$(pwd)" | pbcopy
Вы можете использовать псевдоним, используя что-то с историей, например cwd
, если вы не против переопределить другой cwd
alias cwd='printf "%q\n" "$(pwd)" | pbcopy'
Переключите канал на pbcopy, если вы хотите, чтобы он работал больше как pwd, и просто распечатайте сбежавший путь.
Или, чтобы напечатать pwd, одновременно скопировав его в буфер обмена, используйте tee
и подстановку процесса вывода:
alias cwd='printf "%q\n" "$(pwd)" | tee >(pbcopy)'
pwd | sed 's/ /\\ /g'
Но я не уверен, что это в конечном итоге решит вашу проблему. pbcopy копирует именно то, что он получает на стандартный ввод.
Не существует встроенного способа создания 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)"'
мммммм
bmike
левша
pwd | pbcopy
отлично работает для меня в терминале. Finder/Edit/Show Clipboard подтверждает, что все в порядке.гринвар
левша
pwd | pbcopy
отлично работает в iTerm2.гринвар
cd `pbpaste`
дает мне неэкранированный пробел и, следовательно,cd
не распознает каталог. И, вы правы, эмулятор терминала не имеет значения. Я не знаю, о чем я думал раньше, потому что в Терминале это работает не лучше. Должно быть, не было места.Старый профессионал
cd "`pbpaste`"
Джейсон Салаз
echo \'$(pbpaste)\'
это не сработает.Джейсон Салаз
pwd |pbcopy
? Я примерно на 98% уверен, что есть лучшее решение.Сергей Кривонос