Apakah mungkin untuk memiliki ruang bash escape di pwd?

21

Saya ingin menyalin direktori ke clipboard, sesuatu seperti: pwd | pbcopy. Namun, pwdtidak luput dari ruang, jadi sesuatu di "Dukungan Aplikasi", misalnya, tidak menyalin dengan benar. Sepertinya saya tidak ingat ini selalu terjadi, jadi saya bisa saja men-boff sesuatu. Menggunakan iTerm2.

Apakah ada pengaturan bash untuk melarikan diri semuanya? kesulitan mencari, terlalu banyak pertanyaan / topik tentang Spaces.app atau esc.

Arus:

$ pwd
/Library/Application Support/Google Earth/

Lebih disukai:

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

Posting yang sudah terlihat: Menyalin jalur direktori saat ini ke clipboard dan Bagaimana cara cd ke direktori dengan nama yang mengandung spasi di bash? , yang tidak membahas hal ini. Saya akan membuat komentar di yang pertama, tetapi saya tidak memiliki hak istimewa.

greenwar
sumber
1
Saya ragu salinannya benar - yang Anda inginkan adalah pasta untuk menangani spasi - aplikasi mana yang Anda tempel?
user151019
Pertanyaan bagus Anda akan segera memiliki cukup tenaga untuk berkomentar. Selamat datang di situs ini!
bmike
1
pwd | pbcopybekerja dengan baik untuk saya di Terminal. Finder / Edit / Tampilkan Clipboard menegaskan tidak apa-apa.
lhf
@ lhf Ya, seharusnya sudah diperiksa di Terminal, yang berfungsi seperti yang Anda sebutkan. Tapi tidak ada keberuntungan di iTerm2. Mungkin aku harus beralih kembali ...
greenwar
Bagaimana ini bisa bergantung pada emulator terminal yang Anda jalankan? Saya baru saja menguji dan pwd | pbcopyberfungsi dengan baik di iTerm2.
lhf

Jawaban:

13

Perintah ini akan keluar dari ruang dengan benar:

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

Anda dapat alias menggunakan sesuatu dengan sejarah seperti cwdjika Anda tidak keberatan mendefinisikan ulang cwd yang berbeda

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

Parit pipa ke pbcopy jika Anda ingin bekerja lebih seperti pwd dan cukup cetak lintasan yang lolos.

glenn jackman
sumber
tidak bekerja di mac
Macilias
1
Bekerja di Mac saya.
Jason Swett
5
pwd | sed 's/ /\\ /g'

Tapi saya tidak yakin ini pada akhirnya akan memperbaiki masalah Anda. pbcopy menyalin persis apa yang diterimanya di stdin.

Menandai
sumber
Itu hanya akan keluar dari ruang, yang hampir tidak cukup, meskipun itulah yang digunakan OP sebagai contoh.
Old Pro
tetapi ini bekerja dalam banyak kasus yang benar dari Glenn tidak bekerja pada mac saya, tidak ada output sama sekali
Macilias
Anda juga dapat menggunakannya sebagai alias ketika Anda mendeklarasikan suatu fungsi: function escapePWD () {pwd | sed 's / / \\ / g'; } dan gunakan ini untuk alias: alias epwd = 'escapePWD'
Macilias
1

Tidak ada cara built-in untuk membuat pwdjalur keluar file keluaran, karena ini umumnya tidak berguna.

Tidak masuk akal pwdatau pbcopymenambahkan garis miring terbalik pada apa yang disalin. Jika Anda ingin menyalin path ke file teks atau posting web, Anda tidak ingin backslash dimasukkan ke dalamnya.

Mungkin yang ingin Anda lakukan adalah membuat alias terpisah, seperti qwd, untuk mencetak bentuk kutipan dari direktori saat ini, atau hanya keluar dari keluaran pbpaste, yang semudah memasukkannya ke dalam tanda kutip ganda:

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

Perhatikan bahwa bukan hanya ruang yang perlu melarikan diri. Garis miring ke depan dan ke belakang, tanda bintang, tanda tanya, ampersand, semi-kolon, dan karakter lainnya juga harus lolos. Paling aman adalah dengan menggunakan tanda kutip ganda seperti pada contoh, yang akan bekerja bahkan jika path menyertakan tanda kutip ganda di dalamnya.

Jika Anda ingin sesat tentang hal itu, Anda dapat membuat AppleScript mengutip direktori saat ini untuk Anda:

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'

Kalau tidak, saya sebagian besar setuju dengan Glenn, kecuali, seperti di atas, saya akan alias bentuk yang dikutip untuk qwdtidak mengganggu normal pwd:

alias qwd='printf "%q\n" "$(pwd)"'
Pro tua
sumber