Thư mục gốc đôi so với thư mục gốc


14

Trên hộp Linux của tôi, trong bash, tôi có quyền truy cập vào thư mục "gốc kép" được biểu thị bằng hai dấu gạch chéo về phía trước:

tomas:~ $ cd /
tomas:/ $ ls
bin/ cdrom@ ...
tomas:/ $ cd //
tomas:// $ ls 
bin/ cdrom@ ...

Nội dung của thư mục và thư mục con của nó giống hệt với dấu gạch chéo đơn "bình thường". Dấu gạch chéo kép không biến mất khi tôi truy cập các thư mục con của nó. Các annomaly không lặp lại với ba dấu gạch chéo trở lên; đây là những từ đồng nghĩa đơn giản cho từ gốc:

tomas:// $ cd home/tomas
tomas://home/tomas $ cd ///
tomas:/ $ cd ////
tomas:/ $

Nơi đó là nơi thế nào? Có phải là một lỗi? Bất cứ ai có thể giải thích sự bất thường?


câu hỏi hay - tôi nhận thấy hành vi tương tự nhưng không bao giờ hỏi tại sao điều này xảy ra.
lajuette

Câu trả lời:


18

Từ Bash FAQ E10 :

E10) Tại sao 'cd //' lại để $ PWD là '//'?

POSIX.2, trong mô tả của 'cd', nói rằng ba hoặc nhiều dấu gạch chéo hàng đầu có thể được thay thế bằng một dấu gạch chéo khi chuẩn hóa thư mục làm việc hiện tại.

Đây là, tôi cho rằng, để tương thích lịch sử. Một số phiên bản nhất định của Unix và các hệ thống tệp mạng đầu tiên, đã sử dụng các đường dẫn có dạng // tên máy chủ / đường dẫn để truy cập 'đường dẫn' trên máy chủ 'tên máy chủ'.


1
Tên miền / HĐH là một trong những hệ thống như vậy.
dùng1686

1
Điều chém đôi vẫn được sử dụng. Đó là một phần của Universal (hoặc Đồng phục; tôi dường như không thể tìm thấy một nguồn chính) Quy ước đặt tên hoặc UNC. Nó xuất hiện trong Windows, Unix và Linux. Nó xảy ra là lý do một dấu gạch chéo kép được sử dụng trong các URL.
Isaac Rabinovitch

1

"Nó không phải là một lỗi, đó là một tính năng!"

Bạn vẫn đang ở trong cùng thư mục gốc. Tôi không biết nguồn gốc của điều này, nhưng nghi ngờ nó có thể có liên quan đến việc xây dựng chuỗi cho các đường dẫn tuyệt đối. Nếu ai khác biết chắc chắn, đường ống lên.


0

Nhiều dấu gạch chéo bị bỏ qua bởi các công cụ bạn đã sử dụng và bạn luôn nhận được cùng một thư mục gốc.


Vậy tại sao bash thay đổi /// thành / trong khi rời khỏi // như hiện tại?
Tomas

0

Nhiều dấu gạch chéo được coi là một dấu gạch chéo cho mục đích phân giải tên đường dẫn.

Những gì bạn đang thấy trong dấu nhắc shell là một tạo tác của việc xử lý bash PS1 (xem phần "KHUYẾN MÃI" trong trang bash).

[root@linux /]# cd /    ; echo $PWD
/
[root@linux /]# cd //   ; echo $PWD
//
[root@linux //]# cd /// ; echo $PWD
/
[root@linux /]# cd //// ; echo $PWD
/

Kết quả chỉ là một vấn đề trình bày; bạn luôn ở trong cùng thư mục gốc. Bạn có thể kiểm tra điều này bằng cách nhìn vào /proc/$$/root.

[sửa] Tôi chưa bao giờ biết điều này: http://www.opengroup.org/onlinepub/009695399/basingefs/xbd_chap04.html#tag_04_11 Ý nghĩa của "//" không được xác định bởi các tiêu chuẩn, nhưng "///" và nhiều dấu gạch chéo tương đương với "/".

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.