Saya bermain-main di terminal di Red Hat Linux, dan ketika saya mengetik asterisk ( *
) diikuti oleh return, dan ia menjalankan salah satu program di direktori saya. Mengapa?
Tebakan terbaik saya adalah bahwa Unix memperlakukannya sebagai wildcard sehingga ia menjalankan program alfabet pertama. Karena my_program.exe
dan one_of_my_programs.program
dapat dieksekusi hanya dengan mengetikkan nama file, operator wildcard mewakili semua file yang mungkin. Karena sebuah program pertama kali berdasarkan abjad, Unix menjalankannya. Apakah ini penilaian yang benar?
linux
command-line
bash
unix
pengguna6086585
sumber
sumber
*
berdasarkan abjad, tetapi bash adalah salah satu yang melakukannya.Jawaban:
Penafsiran Anda benar. Sisa file akan disajikan sebagai daftar parameternya.
Perhatikan bahwa ini hanya akan dilakukan jika program memiliki bit yang dapat dieksekusi, dan direktori saat ini ada dalam
PATH
daftar.Beberapa catatan yang dapat membantu memahami: -
./*
makaPATH
entri tersebut bukan keharusan.. *
atau. ./*
dan file yang cocok pertama adalah sebuah skrip, maka itu tidak perlu dapat dieksekusi, juga tidak perlu direktori saat ini beradaPATH
(mungkin tidak berlaku untuk shell selainbash
).sumber
PATH
dengan nama yang sama dengan file pertama maka perintah lain ini akan dieksekusi.mkdir foo; cd foo; touch rm xyz; ls; *; ls
.*
alias.. *
atau. ./*
satu kalengbash *
(atau shell lain).Ini menunjukkan bahwa itu
.
adalah bagian dariPATH
variabel Anda . Itu adalah ide yang sangat buruk untuk alasan keamanan (tentu saja, Windows harus menjadikannya default yang tidak dapat dimodifikasi).Namun, "saran" ini hanya valid sedikit: jika Anda memiliki file bernama
rm
di direktori Anda saat ini,*
akan baik-baik saja mengeksekusi defaultrm
:Seperti yang Anda lihat, itu tidak ada
rm
di direktori saat ini (file kosong dan tidak dapat dieksekusi) yang dieksekusi tetapi lebih dari standar sistem/bin/rm
.Selalu periksa perintah Anda saat wildcard terlibat. Berikut adalah salah satu pesan paling menakutkan yang pernah dibaca:
Ini adalah hasil dari panggilan
, kurang lebih penempatan terburuk dari ruang palsu yang bisa muncul.
sumber
rm()
yang menambah-i
parameter atau memeriksa parameter dan meminta konfirmasi jika ada lebih dari jumlah tertentu.mv /tmp/ohno /tmp/ohnoes
( google.fr/search?q=ohnoes&source=lnms&tbm=isch )