Saya memiliki folder bernama ~kernel-ppa
di dalam ~/Downloads
.
aditya@aditya-desktop:~$ cd Downloads/
aditya@aditya-desktop:~/Downloads$ ls
~kernel-ppa
Sekarang ketika saya mengetik cd ~k
dan menekan Tabuntuk ekspansi otomatis, shell mengekspansi ke cd ~kernoops/
bukan cd ~kernel-ppa/
meskipun folder dengan karakter awal yang sama sudah ada.
Agar ekspansi otomatis berfungsi, saya harus menghindarinya \
. Dengan demikian, menggunakan cd \~k
dan menekan Tabdengan benar akan memperluasnya cd \~kernel-ppa/
. Bahkan menggunakan cd \
dan menekan Tabtidak ada gunanya.
Mengapa begitu dan mengapa saya harus melarikan diri? Selain itu, apa yang saya melarikan diri karena bahkan ~
tidak diperlukan untuk ekspansi otomatis?
Jika saya mengikuti arus dan menjalankan cd ~kernoops/
dan menekan Enter, status terminal berubah menjadi //
:
aditya@aditya-desktop:~/Downloads$ cd ~kernoops/
aditya@aditya-desktop://$ pwd
//
aditya@aditya-desktop://$ ls
bin cdrom etc initrd.img lost+found mnt proc run srv tmp var
boot dev home lib media opt root sbin sys usr vmlinuz
aditya@aditya-desktop://$
Ini terlihat seperti /
direktori, tetapi pwd
mengatakan demikian //
. Apa itu sebenarnya?
sumber
tree
atau denganls
dan Anda akan melihat bahwa itu adalah sub-folder pertama.~kernel-ppa
adalah satu-satunya folder di dalamnya; jika saya hanya menjalankancd
dan tekan tab, itu akan diperluas kecd \~kernel-ppa/
. Saya tidak perlu melarikan diri juga!Jawaban:
Seperti yang Anda ketahui,
~
memperluas ke direktori home Anda. Tapi apa yang Anda lewatkan adalah yang~john
memperluas ke direktori home dari pengguna bernama "john".Periksa
/etc/passwd
file Anda :Ia memiliki nama "pengguna sistem"
kernoops
(untuk alasan pelaporan bug internal). Jadi ketika Anda mengetikkancd ~k
Tabshell memberikan preferensi (1) untuk ekspansi nama pengguna sebelum ekspansi direktori lokal, dan Anda milikicd ~kernoops
. Sekarang hasilnya adalah dir home user "kernoops"/
, jadicd
begitulah.Di shell saya
zsh
,, saya tidak memiliki tebasan ganda (2):Selain itu, nama direktori ini tidak dipikirkan dengan baik. Ini akan membutuhkan tiga perawatan dalam skrip dan apa pun. Satu-satunya ide terburuk yang dapat saya pikirkan adalah menyematkan tab di dalamnya ...
Catatan kaki:
(1) Dalam
zsh
, bahkan jika saya memiliki direktori bernama~xdir
dan tidak ada pengguna yang memulai denganx
; melakukancd ~x
Tabtidak berkembang dan tidak mengutip~
kesalahan give:(2) Saya sepertinya ingat bahwa posix membuat pengecualian untuk inisial
//
di path --- itu harus dipertahankan karena beberapa varian unix lama (saya menggunakan apolos dengan Domain / OS yang memiliki itu) digunakan//machine-name/...
untuk akses tanpa batas ke mesin lain ' filesystem di jaringan lokal (keamanan belum ditemukan). Jadi mungkin bash ada di sini. Jika Anda melakukannya,cd ///
Anda akan memiliki normal/
di kedua shell.Ya, ditemukan di unix.se !
sumber
Karakter tilde (
~
) memiliki makna khusus di shell. Ketika terlihat dalam perintah apa pun, itu diperluas ke nama direktori home Anda. Melakukancd ~
ataucd /home/aditya
sama, berakhir di direktori home Anda.Dengan meletakkan karakter backslash (
\
) di depan tilde, Anda memberi tahu shell untuk tidak melakukan ekspansi karakter khusus berikut (ini yang disebut shell escape). Dengan melakukancd \~
Anda meminta shell untuk pindah ke direktori yang disebut~
yang akan terletak di bawah direktori yang Anda lakukan perintah. Melakukan hal itucd \~kernel-ppa
akan mengubah Anda ke direktori bernama~kernel-ppa
, yang merupakan perilaku normal.Diedit: lebih lanjut tentang ~
Jika Anda menulis nama pengguna sistem setelah
~
, Anda dipindahkan ke direktori home pengguna itu. Melakukan Tabekspansi setelahcd ~
akan diperluas ke nama pengguna yang ada di sistem Anda. Jika Tabselesai setelahcd ~k
itu, ia mengembang ke ~ kernoops karena ada pengguna bernama kernoops di pengguna sistem, dengan direktori home dari/
. Saat perluasancd ~k
hasilcd ~kernoops/
dengan garis miring dan direktori home mulai/
, Anda dipindahkan ke//
. Tapi ini sama persis dengan yang/
sudah dikatakan beberapa orang sebelumnya.sumber