เป็นไปได้หรือไม่ที่จะมีช่องว่าง bash escape ใน pwd?


21

pwd | pbcopyฉันต้องการที่จะคัดลอกไดเรกทอรีปัจจุบันไปยังคลิปบอร์ดสิ่งที่ชอบ: อย่างไรก็ตามpwdอย่าหลบหนีพื้นที่ดังนั้นบางอย่างใน "การสนับสนุนแอปพลิเคชัน" ตัวอย่างเช่นคัดลอกไม่ถูกต้อง ฉันดูเหมือนจะจำไม่ได้ว่านี่เป็นกรณีเสมอดังนั้นฉันจึงสามารถทำอะไรบางอย่างได้ ใช้ iTerm2

มีการตั้งค่าทุบตีเพื่อหลบหนีทุกอย่างหรือไม่ มีปัญหาในการค้นหาคำถามมากเกินไป / หัวข้อเกี่ยวกับ Spaces.app escหรือ

ปัจจุบัน:

$ pwd
/Library/Application Support/Google Earth/

ที่ต้องการ:

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

เห็นแล้วโพสต์: คัดลอกเส้นทางของไดเรกทอรีปัจจุบันไปยังคลิปบอร์ดและวิธีการ cd ไปยังไดเรกทอรีที่มีชื่อที่มีช่องว่างในทุบตี? ซึ่งไม่ได้กล่าวถึงเรื่องนี้ ฉันจะแสดงความคิดเห็นในอดีต แต่ฉันไม่มีสิทธิ์


1
ฉันสงสัยว่าสำเนาถูกต้อง - สิ่งที่คุณต้องการคือการวางเพื่อจัดการช่องว่าง - คุณวางแอพใดอยู่
user151019

เป็นคำถามที่ดีมาก คุณจะมีตัวแทนมากพอที่จะแสดงความคิดเห็น ยินดีต้อนรับสู่เว็บไซต์!
bmike

1
pwd | pbcopyทำงานได้ดีสำหรับฉันใน Terminal ตัวค้นหา / แก้ไข / แสดงคลิปบอร์ดยืนยันว่าใช้ได้
LHF

@lhf ใช่ควรมีการตรวจสอบใน Terminal ซึ่งทำงานได้ตามที่คุณระบุ แม้ว่าจะไม่มีโชคใน 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 ของฉัน
Jason Swett

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

แต่ฉันไม่แน่ใจว่าสิ่งนี้จะช่วยแก้ปัญหาของคุณได้ในที่สุด pbcopy กำลังคัดลอกสิ่งที่ได้รับบน stdin


นั่นจะหลบหนีช่องว่างซึ่งไม่เพียงพอแม้จะเป็นสิ่งที่ OP ใช้เป็นตัวอย่าง
โปรเก่า

แต่งานนี้ในกรณีส่วนใหญ่คนที่เหมาะสมจากเกล็นไม่ได้ออกใน mac ของฉันมีการส่งออกที่ไม่ทั้งหมด
Macilias

คุณสามารถใช้เป็นนามแฝงได้เมื่อคุณประกาศฟังก์ชัน: function escapePWD () {pwd | sed 's / / \\ / g'; } และใช้สำหรับ alias: alias epwd = 'escapePWD'
Macilias

1

ไม่มีวิธีที่มีอยู่แล้วภายในเพื่อสร้างpwdเส้นทางของไฟล์ที่ใช้ Escape ซึ่งเป็นสิ่งที่ไม่มีประโยชน์

ไม่เหมาะสม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

โปรดทราบว่ามันไม่ได้เป็นเพียงช่องว่างที่ต้องหลบหนี เครื่องหมายสแลช, เครื่องหมายคำถาม, เครื่องหมายแอมเปอร์แซนด์, เซมิโคลอนและตัวละครอื่น ๆ Safest เป็นเพียงการใช้เครื่องหมายคำพูดคู่ในตัวอย่างซึ่งจะใช้ได้แม้ว่าเส้นทางจะมีเครื่องหมายคำพูดคู่อยู่ด้วย

หากคุณต้องการวิปริตเกี่ยวกับเรื่องนี้คุณสามารถทำให้ 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)"'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.