Pwd'de bash kaçış boşluklarının olması mümkün mü?


21

Ben gibi, panoya şey geçerli dizini kopyalamak istiyorum: pwd | pbcopy. Ancak, pwdbu alandan kaçmaz, bu nedenle örneğin "Uygulama Desteği" ndeki bir şey doğru şekilde kopyalanmaz. Bunun her zaman böyle olduğunu hatırlamıyor gibiyim, böylece bir şeyleri boğabilirdim. İTerm2'yi kullanma.

Her şeyden kaçmak için bash ayarı var mı? aramada sorun yaşıyorsanız, Spaces.app veya ile ilgili çok fazla soru / konu var esc.

Güncel:

$ pwd
/Library/Application Support/Google Earth/

Tercihli:

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

Zaten mesajları görülme: panoya geçerli dizinin yolunu kopyalanması ve bash boşluk içeren bir adla bir dizine cd nasıl? , buna hitap etmeyen. Eskiden bir yorum yapabilirdim, ama ayrıcalıklara sahip değilim.


1
Kopyanın doğru olduğundan şüpheliyim - istediğin macun boşluklarla uğraşmaktır - hangi uygulamaya yapıştırıyorsun?
kullanıcı151019,

Harika soru Yakında yorum yapacak kadar temsilci olacak. Siteye Hoşgeldiniz!
bmike

1
pwd | pbcopyTerminal'de benim için iyi çalışıyor. Finder / Edit / Show Clipboard tamam olduğunu onaylar.
58'de

@lhf Evet, belirttiğiniz gibi çalışan Terminal'de kontrol etmeliydiniz. Yine de iTerm2'de şans yok. Belki de geri dönmeliyim ...
greenwar

Bu, çalıştırdığınız terminal emülatörüne nasıl bağlı olabilir? pwd | pbcopyİTerm2'de test ettim ve iyi çalıştım.
lhf

Yanıtlar:


13

Bu komut düzgün bir şekilde boşluklardan kaçacaktır:

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

Farklı bir cwd'yicwd yeniden tanımlamayı düşünmüyorsanız , geçmişi olan bir şeyi kullanarak takma ad alabilirsiniz.

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

Eğer pwd gibi daha fazla çalışmasını istiyorsanız ve kaçan yolu yazdırmanız için boruyu pbcopy'ye dikin.


mac üzerinde çalışmıyor
Macilias

1
Mac'imde çalışıyor.
Jason Swett

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

Ancak bunun sorununuzu çözeceğinden emin değilim. pbcopy tam olarak stdin’de aldığı şeyi kopyalıyor.


Bu, OP'nin bir örnek olarak kullandığı halde, neredeyse yeterli olmayan alanlardan kaçacaktır.
Eski Pro

ama bu çoğu durumda işe yarıyor,
glenn'den

Ayrıca bir işlev tanımladığınızda takma isim olarak kullanabilirsiniz: function escapePWD () {pwd | sed 's / / \\ / g'; } ve bunu diğer adlar için kullanın: alias epwd = 'escapePWD'
Macilias

1

pwdÇıktıdan kaçan dosya yollarını yapmak için yerleşik bir yol yoktur , çünkü bu genellikle yararlı değildir.

Kopyalanana ters eğik çizgi eklemek pwdya pbcopyda eklemek anlamsızdır . Yolu bir metin dosyasına veya web postasına kopyalamak istiyorsanız, içine ters eğik çizgi eklemek istemezsiniz.

Muhtemelen yapmak istediğin qwd, geçerli dizinin alıntılanan biçimini basmak ya da çıktısından kaçmak gibi ayrı bir takma ad oluşturmak pbpaste, bunun çift tırnak içine almak kadar kolaydır:

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

Sadece kaçması gereken alanlar olmadığını unutmayın. İleri ve geri eğik çizgiler, yıldız, soru işareti, ve işareti, noktalı virgül ve diğer karakterlerin de kaçması gerekir. En güvenli olanı, örnekte olduğu gibi çift tırnak kullanmaktır; yol içinde çift tırnak işareti olsa bile çalışacaktır.

Bu konuda sapık olmak istiyorsanız, AppleScript'in sizin için geçerli dizini alıntı yapmasını sağlayabilirsiniz:

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'

Aksi takdirde, çoğunlukla, Glenn ile aynı fikirdeyim, yukarıda belirtilenler dışında, qwdnormal olanı engellemeyecek şekilde alıntı formunu değiştiririm pwd:

alias qwd='printf "%q\n" "$(pwd)"'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.