Linuxコマンドに大文字を使用できますか?サポートされていることは知っていますが、それが「問題」なのか、「良いことではない」と考えられるのかを確認したいのですが。
echo -e '#!/bin/sh\necho hello world' > ~/bin/OH\ NOES; chmod +x ~/bin/OH\ NOES; "OH NOES"生成hello worldします。(もちろん~/bin、あなたの中$PATHにあると仮定します)。
Linuxコマンドに大文字を使用できますか?サポートされていることは知っていますが、それが「問題」なのか、「良いことではない」と考えられるのかを確認したいのですが。
echo -e '#!/bin/sh\necho hello world' > ~/bin/OH\ NOES; chmod +x ~/bin/OH\ NOES; "OH NOES"生成hello worldします。(もちろん~/bin、あなたの中$PATHにあると仮定します)。
回答:
Unixではコマンド名に制限はありません。任意のファイルをコマンドにすることができます。また、ファイル名は、ASCII NULまたはASCII以外の文字の1つ以上(ただし上限)の任意のシーケンスにすることができます/。zsh関数名として任意の文字列を使用できる関数の制限も解除されます。
ただし、いくつかの注意事項があります。
.or というコマンドファイルを作成するのに苦労します..;-)。bash、zsh、tcshまたはksh)。通常、標準のコマンドでは大文字は使用されないため、大文字が役立ちます。|、=、&および他の多くは、あなたが使用している場合、シェルにエスケープする必要があるでしょう:、あなたのコマンドは、1つのログインシェルとして使用することはできません... )。あなたも除外することもできます.し、-ユーザーがシェル機能であなたのコマンドをラップできるようにしたい場合にはこれは、多くのシェル内の関数名に許可されていません。zsh補完システムがで始まる関数など)に使用されることがあり_、全桁のコマンドがなどの問題になる可能性がありますcmd>output.log。名前がドットで始まるファイルは、lsシェルグロビングや多くのファイルマネージャーなどによって隠されます。zsh_with_some_funky_option(の代わりにZSH)?
alias .="echo Hello").-(まあ、sudo vim /bin/....)が、困難だった
.() echo Hello。pdkshも同様ですが、.特別な組み込みが優先されます。
はい、できます。すでにいくつかあります。など/usr/bin/X:)
dennis@lightning:~$ ls {/usr{/local,},}/{s,}bin | grep '[A-Z]'
MAKEDEV
amuFormat.sh
GET
HEAD
Mail
POST
X
X11
Xephyr
Xnest
Xorg
NetworkManager
dennis@lightning:~$ zcat ~/.cache/apt-file /archive.ubuntu.com_ubuntu_dists_precise_Contents-i386.gz | tail -n +33 | cut -f1 | grep -P '^(usr/)?s?bin/.*[A-Z]' | wc -l
758
つまり、すべてのUbuntu 12.04で758です。全リスト:https : //gist.github.com/5264777
Xdialog?:oそしてgrep、シェルが実行前に現在のディレクトリで展開するのを避けるために、パラメータを引用する必要があります。
bash私のホームディレクトリでは、実際[A-Z]には「cdfhjmpqrt」に費やしています。したがって、大文字と小文字は区別されません。
zsh、bashのfailglobオプション。私は個人的に、一般的(で私の一時ファイルに名前を付ける~)a、b、c...そして私の一時dirsにA、B、C...
最も有名なコマンドはstty、としても利用可能でしたSTTY。で端末を通常の動作に戻すのは非常に便利でしたSTTY SANE。
/bin/sttyが、何も。回答を少し詳しく説明してください。
aと、端末に表示されAます。正気を回復するには、stty sane次のコマンドを使用します。これが今不可能であることを除けば、非常に歓迎sttyされSTTYたように利用可能です。私はこれが必要だった最後の時間を思い出すことさえできません:)
歴史的なSTTYコマンドに関するいくつかのメモは、他の回答と関連するコメントの:
DEC VT05などの以前の端末 VT50のとその前のテレプリンターは大文字のみをサポートしていました。これは、小文字を入力できないこと、または大文字以外の文字を表示できないことを意味します。
Unixでは大文字と小文字が区別され、ほとんどのコマンドは小文字であるため、問題があることがわかります。そのため、これらを処理する特別なtermio / termiosモードがあります(そして、それらの端末がなくなったとしても、現代のUnicesにはまだあります)。
termio / termiosは、それぞれUnixのttyドライバーを制御するための古いインターフェイスと新しいインターフェイスです。termio(s)ioctlでは、入力、出力、制御フラグ...を指定します。これは、シリアルライン上の電気信号を入力および出力文字に処理する方法と、エコーなどのドライバーの内部動作を指定します。ラインエディタ...それらのほとんどは、最新のUnix VGAコンソールや擬似端末などの仮想端末に適用されます。
コマンドラインインターフェイスtermio(s)はsttyコマンドです。
大文字の端末を処理するには、3つのtermio(s)フラグが関係します。
IUCLC(大文字から小文字への入力):入力文字は、入力時に小文字に変換されます。つまりA、端末から送信されたがと見なされますa。つまり、これをオンにするとLS、VT50を入力できるようになり、シェルはlsから読み取ります/dev/ttyX。sttyコマンドを実行することもできます。IUCLCaloneとterminalを使用するとecho、入力中にLS、ドライバーはls表示できないターミナルに返送されるので(入力内容を確認できます)、OLCUC(小文字を大文字に出力)、つまり端末に送信する前に、小文字を大文字に変換する必要があります。xcase ローカルフラグに入っています。これは、上ケースを送信する(カノニカル入力モードのみで)可能Aタイピングによって\A、および出力に、上部ケースはAとしてレンダリングされます\A。(Linuxには実装されていません)このsttyコマンドには、対応するiuclc、olcucおよびxcase設定と3つすべてのエイリアスがありますlcase。デフォルト設定と取得後の設定stty saneはlcaseオフです。
したがって、VT50を使用している場合、実行する必要があるのは次のコマンドのみです。
stty lcase
何でもできるように。ちょっと待ってください、大文字しか送信できない場合はどうしますか?のSTTYエイリアスとしてコマンドが必要な場所です。そのためstty、のエイリアスとしてsttyサポートLCASEしていlcaseます。
端末がすべて大文字の場合SANEは実行stty saneしたくないため、このようなエイリアスはありません。
通常の端末で実行するstty lcaseかstty olcuc、誤って実行した場合(それを試してみるxtermか、最新の端末)、そこstty saneに戻って通常に戻ります。ただしSTTY、そのためのコマンドは必要ありません。あなたが入力した場合stty sane、あなたがします参照STTY SANEエコーバックを、それが翻訳されていますのみ表示されたテキスト(いない入力されたコマンド)ですが、それはまだですstty sane実行されるコマンド。
これらのiuclc、olcuc、xcaseフラグはPOSIXによって指定されるように使用され(それがLinux上で実装されている理由は、私は真剣に誰もがこれまでの楽しみのため以外のLinuxシステム()にそれらの古い端末のいずれかを接続疑うにもかかわらず、おそらくだ)が、中に削除されましたPOSIX:2001。
Fedora 18の場合:
amuFormat.sh
chkrootkitX
enum_chmLib
enumdir_chmLib
extract_chmLib
fakeCMY
GET
HEAD
Mail
oLschema2ldif
POST
smoltDeleteProfile
smoltGui
smoltSendProfile
smp_conf_zone_man_pass.#prelink#.coLtYv
Terminal
test_chmLib
Thunar
X
Xephyr
xfig-Xaw3d
Xorg
Xvnc
MAKEDEV
NetworkManager
amuFormat.sh
chkrootkitX
enum_chmLib
enumdir_chmLib
extract_chmLib
fakeCMY
GET
HEAD
Mail
oLschema2ldif
POST
smoltDeleteProfile
smoltGui
smoltSendProfile
smp_conf_zone_man_pass.#prelink#.coLtYv
Terminal
test_chmLib
Thunar
X
Xephyr
xfig-Xaw3d
Xorg
Xvnc
MAKEDEV
NetworkManager
合計で50(うち私はほとんど知りませんでした)。
Debian sid、zsh、およびでls -1 $path | grep '[A-Z]'、
GET
HEAD
HtFileType
Mail
POST
Pnews
Rnmail
X
X11
Xephyr
Xorg
ircII
amuFormat.sh
hpljP1005
hpljP1006
hpljP1007
hpljP1008
hpljP1505
編集:上記のコマンドでは、文字ではなく数字の1であることに注意してくださいl。1列に1つ。
zsh実行:type -m '*[A-Z]*'
$pathは一度もbashにありません。まあ、情報が多ければ多いほど良いです。
$pathはzsh固有ではないことに注意してください。それはcsh/tcshあなたのコマンドが機能する場所から来ます。
-mは「マッチ」のためだと思います。)