Apa maksud // di jalan?

9

Saya sedang bekerja di terminal saya, ketika saya salah mengeja sementara cduntuk root ( /). Secara tidak sengaja, saya mengetik //dan tiba di terminal:

root@weblocalhost://#

Ketika saya mengetik pwd, saya mendapat respons //tetapi ketika saya mengetik ls -ssaya mendapat daftar yang sama seperti di /direktori.

Saat Anda mengetik lebih dari 2, yaitu ///Anda mendapatkan:

root@weblocalhost:/#

Selalu 1 /kecuali untuk 2. Apakah ada perbedaan dan untuk apa //?

Dimitris Theodoridis
sumber

Jawaban:

8

/ setara dengan //

Dari spesifikasi POSIX (penekanan ditambahkan):

3.267 Pathname

String yang digunakan untuk mengidentifikasi file. Dalam konteks POSIX.1-2008, nama path mungkin terbatas pada {PATH_MAX} byte, termasuk terminasi null byte. Ini memiliki <slash> karakter awal opsional , diikuti oleh nol atau lebih nama file yang dipisahkan oleh <slash> karakter. Pathname opsional dapat berisi satu atau lebih <slash>karakter tambahan. Beberapa <slash>karakter berturut-turut dianggap sama dengan satu <slash>, kecuali untuk kasus tepat dua <slash>karakter utama .

Dan :

4.12 Resolusi Pathname

...
Pathname yang terdiri dari satu <slash>harus menyelesaikan ke direktori root dari proses. Pathname nol tidak akan berhasil diselesaikan. Jika nama path dimulai dengan dua <slash>karakter berturut-turut , komponen pertama yang mengikuti <slash>karakter utama dapat ditafsirkan secara implementasi, meskipun lebih dari dua <slash>karakter utama harus diperlakukan sebagai satu <slash> karakter.

Untuk diskusi yang bagus tentang pengecualian (cygwin dan direktori) lihat: Bagaimana linux menangani beberapa pemisah jalur berurutan (/ home //// username /// file)?

Harimau kumbang
sumber
4

Anda dapat menambahkan beberapa garis miring ke direktori dan itu tidak akan mengubah apa pun.

Misal ketiga perintah ini semuanya melakukan hal yang sama:
cd /home
cd /home/
cd /home//

Setelah semua ini, direktori kerja saya saat ini diatur ke / home (periksa dengan pwd).

Saya kira Anda telah mengkonfigurasi prompt Anda untuk melakukan sesuatu yang cerdas dan Anda mengalami perilaku yang tidak terduga. Apa yang kamu dapatkan saat kamu echo $PS1?

Tautan ke komentar di https://unix.stackexchange.com/ yang dapat menjelaskannya.

Hennes
sumber
PS1 saya di bash di OSX adalah "\ h: \ W \ u \ $" dan saya mendapatkan perilaku aneh ini juga. / dan /// dan //// dan ///// semua muncul sebagai /, tetapi kasus khusus dua garis miring muncul sebagai dua garis miring.
Sparr
Saya mendapatkan \ u @ \ h: \ w (<b> u </b> ser di <b> h </b> pertama, <b> w </b> direktori orking) di Ubuntu 12.10 tetapi saya gagal mereproduksi masalah.
Hennes
tidak, saya selalu // ketika memeriksa pwd dalam hal apa pun. untuk echo $ PS1 saya dapatkan: \ [\ e] 0; \ u @ \ h: \ w \ a \] $ {debian_chroot: + ($ debian_chroot)} \ u @ \ h: \ w \ $
Dimitris Theodoridis
Saya hanya secara manual mengatur PS1 saya dan saya tidak dapat mereproduksi dengan dua garis miring. Aneh. Tidak dengan 1, 3 atau 4. Hanya dengan 2. Saya bingung menjelaskan hal ini.
Hennes
Mungkin komentar dari unix.stackexchange ini adalah jawabannya: Saya percaya bahwa API compat Windows POSIX juga akan memperlakukan // remote / ... sama dengan format UNC path \\ remote \ .... - Stephen P 20 Januari 11 jam 0:39
Hennes