Linuxコマンドに大文字を含めることはできますか?私はそれがサポートされていることを知っていますが、それが「問題」なのか、それとも「良くないこと」なのかを確認したいですか?
Unixでは、コマンド名に制限はありません。任意のファイルをコマンドにすることができます。また、ファイル名は、ASCII NULまたはASCII /
。 zsh
は、関数名として任意の文字列を持つことができる関数の制限を解除します。
ただし、いくつかのメモ:
.
または..
;-)というコマンドファイルを作成するのは難しいでしょう。bash
、zsh
、tcsh
またはksh
など)がすでに使用している名前は避けてください)。その点では、大文字は一般に標準コマンドでは使用されないため、役立ちます。|
、=
、&
など)。シェルでエスケープする必要がある場合は、 :
を使用すると、コマンドをログインシェルとして使用できません...)。ユーザーがシェル関数でコマンドをラップできるようにする場合は、多くのシェルで関数名で許可されない.
および-
を除外することもできます。zsh
のように、補完システムの関数が_
で始まる)に使用されることがあり、全桁コマンドはcmd>output.log
などの問題になり得ます。名前がドットで始まるファイルは、ls
やシェルグロビング、多くのファイルマネージャーなどによって非表示になります。はい、できます。すでにいくつかあります。といった /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
最も有名なコマンドはstty
で、STTY
としても利用できました。 STTY SANE
を使用して端末を通常の動作に戻すと非常に便利です。
その他の回答と関連コメント のいくつかの不正確さを明確にするための、歴史的なSTTY
コマンドに関するいくつかのメモ:
DEC VT05 または VT5 などの以前の端末と、それ以前のテレプリンターは大文字のみをサポートしていました。つまり、それらから小文字を入力できなかったり、大文字以外の文字を表示できなかったりするということです。
Unixは大文字と小文字を区別し、ほとんどのコマンドは小文字です。そこに問題があることがわかります。これが、それらを処理するための特別なtermio/termiosモードがある(そして、それらの端末が古くなったとしても、現代のUnicesにはまだある)理由です。
termio/termiosはそれぞれ、Unixのttyドライバーを制御するための古いインターフェースと新しいインターフェースです。 termio(s)ioctl
では、入力、出力、制御フラグを指定します。これは、シリアルラインの電気信号を入出力文字に処理する方法と、エコーなどのドライバーの内部動作を指定します。行エディタ...それらのほとんどは、現代のUnix VGAコンソールや疑似端末のような仮想端末に適用されます。
termio(s)
のコマンドラインインターフェイスは、stty
コマンドです。
大文字の端子を処理するために、3つのtermio(s)
フラグが関係しています。
IUCLC
(大文字から小文字への入力):入力文字は入力時に小文字に変換されます。つまり、端末から送信されたA
はa
と見なされます。つまり、これをオンにすると、VT50でLS
と入力できるようになり、シェルは/dev/ttyX
からls
を読み取ります。 stty
コマンドを実行することもできます。IUCLC
のみとターミナルecho
を使用して、LS
と入力すると、ドライバーはls
をターミナルに送信し(入力した内容を確認できるため)、表示できないため、OLCUC
(小文字の小文字を大文字に出力)も必要ですケース)、つまり、端末に送信する前に小文字を大文字に変換する必要があります。xcase
localフラグを使用します。これにより、(正規入力モードのみで)\A
と入力して大文字のA
を送信できます。出力では、大文字のA
は\A
としてレンダリングされます。 (Linuxでは実装されていません)stty
コマンドには、対応するiuclc
、olcuc
、xcase
の設定と、3つすべてのエイリアスlcase
があります。デフォルト設定とstty sane
の後に得られるものはlcase
オフです。
したがって、VT50を使用している場合、実行する必要があるのは実行するだけです。
stty lcase
何でもできるようになります。でも、ちょっと待ってください、大文字しか送れないときはどうしますか?そのため、STTY
のエイリアスとしてstty
コマンドが必要です。そのため、stty
は、LCASE
のエイリアスとしてlcase
をサポートしています。
端末がすべて大文字の場合はstty sane
を実行したくないため、そのような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つの列にあるようなもの。