Periksa apakah alias GREPatau which GREPhasilkan sesuatu.
chepner
1
Ini dia. Anda memiliki perintah bernama GREP, yang berbeda dari grep. (Benar, ini mungkin hanya berupa tautan keras atau tautan simbolis /usr/bin/grep, tetapi dari sudut pandang shell, ini adalah perintah terpisah.)
chepner
12
Tunggu: Anda menggunakan Mac OS X, bukan? HFS + secara default menggunakan case-preserving, yang berarti bahwa jika case penting saat Anda membuat file, tetapi begitu file itu ada, pencarian tidak peka huruf besar-kecil. Artinya, bashmungkin meminta file bernama GREP, tetapi sistem file menganggap grepkecocokan.
chepner
1
Ya, karena itu adalah Unix.
DisplayName
4
Sistem file tidak tergantung pada sistem operasi. Anda dapat menggunakan sistem file lain dengan Mac OS X, dan Anda dapat (secara teori) menggunakan HFS + dengan sistem operasi lain. Anda juga dapat membuat HFS + peka huruf besar-kecil; perilaku melestarikan kasus hanyalah default karena alasan historis.
chepner
Jawaban:
71
Dari pertanyaan Anda yang lain saya ambil Anda menggunakan OS X. Sistem file HFS + default pada OS X adalah case-insensitive: Anda tidak dapat memiliki dua file yang disebut "abc" dan "ABC" di direktori yang sama, dan mencoba mengakses salah satu nama akan sampai ke file yang sama. Hal yang sama dapat terjadi di bawah Cygwin, atau dengan sistem file case-insensitive (seperti FAT32 atau ciopfs ) di mana saja.
Karena grep ini adalah executable yang nyata, ia mencari di sistem file (di direktori PATH). Ketika shell Anda mencari /usr/binsalah satu grepatau GREPitu akan menemukan grepexecutable.
Shell builtins tidak dicari pada sistem file: karena mereka built-in, mereka diakses melalui perbandingan string (case-sensitive) di dalam shell itu sendiri.
$ type cd
cd is a shell builtin
$ type CD
CD is /usr/bin/CD
typememberi tahu Anda apa yang shell akan lakukan ketika Anda menjalankan perintah itu. Ketika Anda menjalankan cdAnda mengakses builtin, tetapi CDmenemukan executable. Untuk builtin lain, builtin dan executable akan cukup kompatibel (coba echo), tetapi untuk cditu tidak mungkin.
jawaban yang bagus. Aku akan mengatakan cygwin, yang akan memiliki efek yang sama.
Joshua
@ Joshua Masalah OP terpecahkan, tapi saya pikir untuk pembaca lebih lanjut dari pertanyaan, jawaban berbasis cygwin akan setidaknya sama bermanfaatnya dengan yang ada; Mungkin Anda bisa menjadikan ini jawaban yang terpisah, meskipun pendek, dan menunda jawaban yang sudah ada untuk detail?
Volker Siegel
1
Mengapa posix memerlukan perintah yang tidak berguna seperti cd, dan mengapa cd internal osx tidak memenuhi syarat?
John
2
51 upvotes! Seharusnya saya baru saja mengirim jawaban, daripada komentar :)
chepner
1
/ usr / bin / cd memiliki tujuan. sintaksnya adalah argumen / direktori program direktori usr / bin / cd
alias GREP
atauwhich GREP
hasilkan sesuatu.GREP
, yang berbeda darigrep
. (Benar, ini mungkin hanya berupa tautan keras atau tautan simbolis/usr/bin/grep
, tetapi dari sudut pandang shell, ini adalah perintah terpisah.)bash
mungkin meminta file bernamaGREP
, tetapi sistem file menganggapgrep
kecocokan.Jawaban:
Dari pertanyaan Anda yang lain saya ambil Anda menggunakan OS X. Sistem file HFS + default pada OS X adalah case-insensitive: Anda tidak dapat memiliki dua file yang disebut "abc" dan "ABC" di direktori yang sama, dan mencoba mengakses salah satu nama akan sampai ke file yang sama. Hal yang sama dapat terjadi di bawah Cygwin, atau dengan sistem file case-insensitive (seperti FAT32 atau ciopfs ) di mana saja.
Karena
grep
ini adalah executable yang nyata, ia mencari di sistem file (di direktoriPATH
). Ketika shell Anda mencari/usr/bin
salah satugrep
atauGREP
itu akan menemukangrep
executable.Shell builtins tidak dicari pada sistem file: karena mereka built-in, mereka diakses melalui perbandingan string (case-sensitive) di dalam shell itu sendiri.
Apa yang Anda temui adalah kasus yang menarik. Sedangkan
cd
builtin, diakses case-sensitive,CD
ditemukan sebagai executable/usr/bin/cd
. Thecd
dieksekusi adalah cukup berguna: karenacd
mempengaruhi lingkungan eksekusi shell saat ini, selalu disediakan sebagai shell biasa built-in , tapi adacd
eksekusi untuk POSIX ini demi pula, yang mengubah direktori untuk dirinya sendiri dan kemudian segera berakhir, meninggalkan shell sekitarnya mulai dari manaAnda dapat mencobanya dengan
type
builtin :type
memberi tahu Anda apa yang shell akan lakukan ketika Anda menjalankan perintah itu. Ketika Anda menjalankancd
Anda mengakses builtin, tetapiCD
menemukan executable. Untuk builtin lain, builtin dan executable akan cukup kompatibel (cobaecho
), tetapi untukcd
itu tidak mungkin.sumber