GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Linux Menangani Beberapa Pemisah Jalur Berturut-turut (/home////username///file)?

Saya sedang mengerjakan skrip python yang meneruskan lokasi file ke subproses scp. Tidak apa-apa, tetapi saya berada dalam situasi di mana saya mungkin akhirnya menggabungkan jalur dengan nama file sehingga ada '/ ganda di jalan. Saya tahu bahwa bash tidak peduli jika Anda memiliki banyak pemisah file, tetapi saya ingin tahu bagaimana tepatnya hal itu diperbaiki. Apakah bash yang menghapus / extra ekstra s atau apakah itu benar-benar tidak penting?

Saya bertanya karena ini akan menghemat beberapa baris kode untuk memeriksa / tambahan s sambil menggabungkan. Aku tahu ini bukan masalah besar, tapi aku juga penasaran. Saya memiliki skrip bash yang memiliki baris cd //usr (bukan cd /usr ), yang tampaknya menyiratkan bahwa mungkin ada signifikansi untuk menggunakan beberapa / s di jalan

Jawaban yang Diterima:

Beberapa garis miring diperbolehkan dan setara dengan satu garis miring. Dari spesifikasi Single Unix (versi 4), definisi dasar 3.271 pathname:“Beberapa garis miring yang berurutan dianggap sama dengan satu garis miring.”

Ada satu pengecualian:Jika nama path dimulai dengan dua karakter garis miring yang berurutan, komponen pertama yang mengikuti karakter garis miring utama dapat diinterpretasikan dengan cara yang ditentukan oleh implementasi. (ref:definisi dasar 4.13 resolusi nama path). Linux sendiri tidak melakukan ini, meskipun beberapa aplikasi mungkin melakukannya, dan sistem unix-ish lainnya melakukannya (mis. Cygwin).

/ . tambahan di akhir nama path memaksa nama path untuk merujuk ke direktori. Dalam (POSIX 1003.1-2001 (Single Unix v4) definisi dasar 4.11 resolusi nama path, sebuah / tambahan setara dengan /. . di akhir . Definisi dasar POSIX 1003.1-2008 (Single Unix v4) 4.13 menghilangkan persyaratan untuk membuatnya setara dengan /. , untuk mengatasi direktori yang tidak ada (mis. mkdir foo/ diperlukan untuk bekerja, sedangkan mkdir foo/. tidak akan — lihat alasan perubahannya).

Untuk program yang bekerja pada entri direktori, jika foo adalah tautan simbolis ke direktori, lalu meneruskan foo/ adalah cara untuk membuat program bertindak pada direktori alih-alih tautan simbolik.

Perhatikan bahwa ini hanya berlaku untuk resolusi nama jalur, yaitu saat mengakses file. Manipulasi nama file dapat bekerja secara berbeda. Misalnya basename dan dirname mengabaikan garis miring.


Linux
  1. Bash =~ Regex Dan Https://regex101.com/?

  2. Seberapa Portabel /dev/stdin, /dev/stdout Dan /dev/stderr?

  3. Debian – Memindahkan /var, /home Untuk Memisahkan Partisi?

  1. Linux – Menggabungkan /usr/bin Dan /usr/sbin Ke /bin (gnu/linux)?

  2. Kubuntu Menunjukkan Kesalahan Saat Masuk (file:///usr/share/sddm//themes/breeze/main.qml:no File Atau Direktori Tersebut)?

  3. Ubuntu 14.04 "tidak Mendapatkan Uri Pemutaran Saat Masuk File:///*"?

  1. “tidak dapat Membuat Direktori Cache /home//.composer/cache/repo/https—packagist.org/, Atau Direktori Tidak Dapat Ditulis. Melanjutkan Tanpa Cache”?

  2. Instal binari ke /bin, /sbin, /usr/bin dan /usr/sbin, interaksi dengan --prefix dan DESTDIR

  3. Kapan saya harus menggunakan /dev/shm/ dan kapan saya harus menggunakan /tmp/?