Bisakah perintah Linux menggunakan huruf besar? Saya tahu ini didukung tetapi saya ingin memastikan apakah itu "masalah" atau dianggap "bukan hal yang baik"?
linux
shell
command-line
terdon
sumber
sumber
echo -e '#!/bin/sh\necho hello world' > ~/bin/OH\ NOES; chmod +x ~/bin/OH\ NOES; "OH NOES"
menghasilkanhello world
seperti yang diharapkan. (Dengan asumsi~/bin
ada di Anda$PATH
, tentu saja).Jawaban:
Tidak ada batasan nama perintah di Unix. File apa pun bisa menjadi perintah. Dan nama file dapat berupa urutan satu atau lebih (hingga batas tertentu) karakter selain ASCII NUL atau ASCII
/
.zsh
bahkan mengangkat batasan itu untuk fungsi di mana Anda dapat memiliki string apa pun sebagai nama fungsi.Beberapa catatan:
.
atau..
;-).bash
,zsh
,tcsh
atauksh
). Dalam hal ini karakter huruf besar dapat membantu karena umumnya tidak digunakan oleh perintah standar.|
,=
,&
dan banyak orang lain akan perlu melarikan diri dalam kerang, jika Anda menggunakan:
, perintah Anda tidak dapat digunakan sebagai seseorang shell login ... ). Anda bahkan mungkin ingin mengecualikan.
dan-
yang tidak diizinkan dalam nama fungsi di banyak shell, jika Anda ingin mengizinkan pengguna untuk membungkus perintah Anda dalam fungsi shell.zsh
fungsi dari sistem penyelesaian dimulai dengan_
), dan perintah semua digit bisa menjadi masalah dalam hal-hal seperticmd>output.log
. File yang namanya dimulai dengan titik akan disembunyikan oleh hal-hal sepertils
atau shell globbings dan banyak manajer file.sumber
zsh_with_some_funky_option
(bukanZSH
)?alias .="echo Hello"
.-) (Yah,sudo vim /bin/.
lebih sulit, meskipun ...).() echo Hello
. Begitu juga pdksh, tetapi.
builtin khusus diutamakan di sana.Ya itu bisa, dan sudah ada beberapa. Seperti
/usr/bin/X
:)Jadi itu 758 di semua Ubuntu 12,04. Daftar lengkap: https://gist.github.com/5264777
sumber
Xdialog
? : o Dan Anda harus mengutipgrep
parameter untuk menghindari shell memperluasnya di direktori saat ini sebelum eksekusi.grep
parameter mengutip : pastebin.com/Gak7x9rN (Ya, saya dapat mengeditnya sendiri, tetapi saya lebih suka Anda mengerti mengapa.)bash
di direktori home saya benar-benar[A-Z]
dikeluarkan untuk "cdfhjmpqrt". Jadi kasus tidak sensitif.zsh
atau bashfailglob
. Saya pribadi biasanya nama file temp saya (di~
)a
,b
,c
... dan saya suhu dirsA
,B
,C
...Perintah yang paling terkenal adalah
stty
, yang juga tersedia sebagaiSTTY
. Sangat berguna untuk mengatur terminal kembali ke perilaku normalSTTY SANE
.sumber
/bin/stty
tetapi tidak ada yang lain. Ingin sedikit menguraikan jawaban Anda?a
dan terminal akan melihatA
. Untuk mengembalikan kewarasan, Anda akan menggunakanstty sane
perintah. Kecuali bahwa ini sekarang tidak mungkin, karena itustty
tersedia sebagaiSTTY
sangat disambut. Saya bahkan tidak ingat kapan terakhir kali saya membutuhkan ini :)Beberapa catatan tentang
STTY
perintah historis untuk mengklarifikasi beberapa ketidakakuratan dalam jawaban lain dan komentar terkait :Terminal sebelumnya seperti DEC VT05 atau VT50 dan teleprinters sebelumnya hanya mendukung karakter huruf besar. Yang dimaksud adalah bahwa tidak ada karakter huruf kecil yang dapat menjadi input dari mereka atau bahwa mereka tidak akan dapat menampilkan huruf selain huruf besar.
Unix peka huruf besar kecil dan sebagian besar perintah menjadi huruf kecil, Anda dapat melihat ada masalah di sana. Itu sebabnya ada mode termio / termios khusus (dan yang masih ada di Unites modern meskipun terminal tersebut sudah lama hilang) untuk menangani hal itu.
termio / termios masing-masing adalah antarmuka yang lebih lama dan lebih baru untuk mengontrol driver tty di Unix. Dalam termio (s)
ioctl
, Anda menentukan input, output, bendera kontrol ... yang menentukan bagaimana sinyal listrik pada garis serial harus ditangani menjadi karakter input dan output dan perilaku internal driver wrt hal-hal seperti gema, editor baris ... Sebagian besar berlaku untuk terminal virtual seperti konsol Unix VGA modern atau terminal semu.Antarmuka baris perintah
termio(s)
adalahstty
perintah.Untuk menangani terminal huruf besar, ada tiga
termio(s)
flag yang terlibat:IUCLC
(Input Huruf Besar ke Huruf Kecil): karakter yang masuk dikonversi ke huruf kecil saat diinput. Itu berartiA
pengiriman oleh terminal dianggap sebagai aa
. Itu berarti bahwa dengan ini aktif, sekarang saya bisa mengetikkanLS
VT50 saya, dan shell akan membacals
dari/dev/ttyX
. Saya juga sekarang dapat menjalankanstty
perintah.IUCLC
sendirian dan terminalecho
, saat saya mengetikLS
, pengemudi akan mengirimls
kembali ke terminal (sehingga saya dapat melihat apa yang saya ketik) yang tidak dapat ditampilkan, jadi kami juga perluOLCUC
(Output Huruf Kecil ke Huruf Besar), yaitu kita perlu mengubah huruf kecil menjadi huruf besar sebelum mengirim ke terminal.xcase
lokal masuk. Ini memungkinkan (hanya dalam mode input kanonik) mengirim huruf besarA
dengan mengetik\A
, dan pada output, huruf besarA
diterjemahkan sebagai\A
. (yang tidak diimplementasikan di Linux)The
stty
perintah memiliki yang sesuaiiuclc
,olcuc
danxcase
pengaturan dan alias untuk ketiga:lcase
. Pengaturan default dan apa yang Anda dapatkanstty sane
tidaklcase
aktif.Jadi, ketika Anda menggunakan VT50, yang perlu Anda lakukan adalah menjalankan:
untuk dapat melakukan apa saja. Tetapi tunggu dulu, bagaimana Anda melakukannya ketika Anda hanya bisa mengirim huruf besar? Di situlah Anda memerlukan
STTY
perintah sebagai alias untukstty
, dan itulah sebabnyastty
mendukungLCASE
sebagai alias untuklcase
.Tidak ada
SANE
alias seperti itu karena Anda tidak ingin melakukanstty sane
ketika terminal Anda adalah huruf kapital semua.Jika Anda menjalankan
stty lcase
ataustty olcuc
secara tidak sengaja pada terminal normal (coba dixterm
atau terminal modern), di situlah Anda harus masukstty sane
untuk kembali ke normal. Tetapi Anda tidak perluSTTY
perintah untuk itu. Jika Anda mengetikstty sane
, Anda akan melihatSTTY SANE
kembali bergema, tapi itu hanya teks yang ditampilkan (bukan perintah yang dimasukkan) yang akan diterjemahkan, itu masihstty sane
perintah yang akan dijalankan.Mereka
iuclc
,olcuc
,xcase
bendera yang digunakan akan ditentukan oleh POSIX (dan itulah mungkin mengapa ini diterapkan di Linux meskipun saya benar-benar ragu ada yang pernah terhubung salah satu dari mereka terminal lama ke sistem Linux (selain untuk bersenang-senang)), tetapi telah dihapus di POSIX: 2001.sumber
Pada Fedora 18 di sini:
Total 50 (yang saya tidak tahu kebanyakan).
sumber
Di sisi Debian, dengan zsh, dan
ls -1 $path | grep '[A-Z]'
, saya mengertiSunting: Perhatikan bahwa, dalam perintah di atas, itu yang digit, bukan hurufnya
l
. Satu seperti dalam satu kolom.sumber
zsh
, jalankan:type -m '*[A-Z]*'
$path
tidak dalam bash, untuk sekali. Nah, semakin banyak informasi, semakin baik.$path
ini tidak spesifik zsh. Itu datang daricsh/tcsh
tempat perintah Anda juga bekerja.-m
ini untuk "pertandingan".)