Có thể có không gian thoát bash trong pwd?


21

Tôi muốn sao chép thư mục hiện tại vào bảng tạm, đại loại như : pwd | pbcopy. Tuy nhiên, pwdkhông thoát khỏi không gian, vì vậy, một cái gì đó trong "Hỗ trợ ứng dụng", chẳng hạn, không sao chép chính xác. Tôi dường như không nhớ điều này luôn luôn như vậy, vì vậy tôi có thể đã bỏ qua một cái gì đó. Sử dụng iTerm2.

Có thiết lập bash để thoát khỏi mọi thứ? gặp khó khăn khi tìm kiếm, quá nhiều câu hỏi / chủ đề về Spaces.app hoặc esc.

Hiện hành:

$ pwd
/Library/Application Support/Google Earth/

Ưu tiên:

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

Bài viết đã thấy: Sao chép đường dẫn của thư mục hiện tại vào bảng tạmLàm thế nào để cd vào thư mục có tên chứa dấu cách trong bash? , mà không giải quyết điều này. Tôi đã có một nhận xét trước đây, nhưng tôi không có đặc quyền.


1
Tôi nghi ngờ rằng bản sao là chính xác - những gì bạn muốn là dán để đối phó với không gian - bạn đang dán ứng dụng nào?
dùng151019

Câu hỏi tuyệt vời. Bạn sẽ sớm có đại diện đủ để bình luận. Chào mừng đến với trang web!
bmike

1
pwd | pbcopyhoạt động tốt cho tôi trong Terminal. Finder / Chỉnh sửa / Hiển thị Clipboard xác nhận nó ổn.
lhf

@lhf Có, nên đã kiểm tra trong Terminal, hoạt động như bạn đã nêu. Không có may mắn trong iTerm2, mặc dù. Có lẽ tôi nên chuyển trở lại ...
greenwar

Làm thế nào điều này có thể phụ thuộc vào trình giả lập thiết bị đầu cuối bạn đang chạy? Tôi vừa mới thử nghiệm và pwd | pbcopyhoạt động tốt trong iTerm2.
lhf

Câu trả lời:


13

Lệnh này sẽ thoát không gian đúng cách:

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

Bạn có thể đặt bí danh cho nó bằng cách sử dụng một cái gì đó có lịch sử như cwdnếu bạn không định nghĩa lại một cwd khác

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

Bỏ ống vào pbcopy nếu bạn muốn nó hoạt động giống như pwd và chỉ cần in ra đường dẫn thoát.


không hoạt động trên mac
Macilias

1
Hoạt động trên máy Mac của tôi.
Jason Swett

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

Nhưng tôi không chắc chắn điều này cuối cùng sẽ khắc phục vấn đề của bạn. pbcopy đang sao chép chính xác những gì nó nhận được trên stdin.


Điều đó sẽ chỉ thoát khỏi các không gian, gần như không đủ, mặc dù đó là những gì OP sử dụng làm ví dụ.
Old Pro

nhưng điều này hoạt động trong hầu hết các trường hợp, cái thích hợp từ glenn không hoạt động trên máy mac của tôi, không có đầu ra nào cả
Macilias

Bạn cũng có thể sử dụng nó làm bí danh khi bạn khai báo một hàm: function escPWD () {pwd | sed 's / / \\ / g'; } và sử dụng điều này cho bí danh: bí danh epwd = 'escPWD'
Macilias

1

Không có cách tích hợp nào để tạo pwdđường dẫn tệp thoát ra, vì điều này thường không hữu ích.

Nó không có ý nghĩa cho pwdhoặc pbcopythêm dấu gạch chéo ngược vào những gì được sao chép. Nếu bạn muốn sao chép đường dẫn vào tệp văn bản hoặc bài đăng trên web, bạn sẽ không muốn dấu gạch chéo ngược được chèn vào nó.

Có lẽ những gì bạn muốn làm là tạo ra các bí danh riêng biệt, như qwd, để in biểu mẫu được trích dẫn của thư mục hiện tại hoặc chỉ thoát khỏi đầu ra pbpaste, dễ dàng như đặt nó trong dấu ngoặc kép:

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

Lưu ý rằng nó không chỉ là không gian cần thoát. Chém về phía trước và lùi, ngôi sao, dấu hỏi, ký hiệu, dấu chấm phẩy và các ký tự khác cũng cần thoát. An toàn nhất là chỉ sử dụng dấu ngoặc kép như trong ví dụ, nó sẽ hoạt động ngay cả khi đường dẫn có dấu ngoặc kép trong đó.

Nếu bạn muốn nói xấu về nó, bạn có thể đặt AppleScript trích dẫn thư mục hiện tại cho bạn:

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'

Nếu không tôi đều đồng ý với Glenn, trừ, như ở trên, tôi sẽ bí danh dưới dạng trích dẫn để qwdnhư vậy là không can thiệp vào việc bình thường pwd:

alias qwd='printf "%q\n" "$(pwd)"'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.