web-dev-qa-db-ja.com

Linuxコマンドに大文字を含めることはできますか?

Linuxコマンドに大文字を含めることはできますか?私はそれがサポートされていることを知っていますが、それが「問題」なのか、それとも「良くないこと」なのかを確認したいですか?

17
user33985

Unixでは、コマンド名に制限はありません。任意のファイルをコマンドにすることができます。また、ファイル名は、ASCII NULまたはASCII /zshは、関数名として任意の文字列を持つことができる関数の制限を解除します。

ただし、いくつかのメモ:

  • .または.. ;-)というコマンドファイルを作成するのは難しいでしょう。
  • 標準コマンドまたはShellビルトインまたはキーワード(少なくとも最も一般的なシェルのbashzshtcshまたはkshなど)がすでに使用している名前は避けてください)。その点では、大文字は一般に標準コマンドでは使用されないため、役立ちます。
  • ASCII文字に制限することをお勧めします。非ASCII文字は、そこにあるさまざまな文字セットで同じように表現されていません
  • その間、文字、数字、ダッシュ、ドット、およびアンダースコアに制限してください。それ以外のものは、合法であるにもかかわらず、このツールまたはそのツールで何らかの問題を引き起こす可能性があります(たとえば、|=&など)。シェルでエスケープする必要がある場合は、 :を使用すると、コマンドをログインシェルとして使用できません...)。ユーザーがシェル関数でコマンドをラップできるようにする場合は、多くのシェルで関数名で許可されない.および-を除外することもできます。
  • 最初の文字を文字にします。繰り返しになりますが、厳密な要件ではありません。ただし、アンダースコアは特別なもの(zshのように、補完システムの関数が_で始まる)に使用されることがあり、全桁コマンドはcmd>output.logなどの問題になり得ます。名前がドットで始まるファイルは、lsやシェルグロビング、多くのファイルマネージャーなどによって非表示になります。
13

はい、できます。すでにいくつかあります。といった /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

27

最も有名なコマンドはsttyで、STTYとしても利用できました。 STTY SANEを使用して端末を通常の動作に戻すと非常に便利です。

4
ott--

その他の回答と関連コメント のいくつかの不正確さを明確にするための、歴史的なSTTYコマンドに関するいくつかのメモ:

DEC VT05 または VT5 などの以前の端末と、それ以前のテレプリンターは大文字のみをサポートしていました。つまり、それらから小文字を入力できなかったり、大文字以外の文字を表示できなかったりするということです。

Unixは大文字と小文字を区別し、ほとんどのコマンドは小文字です。そこに問題があることがわかります。これが、それらを処理するための特別なtermio/termiosモードがある(そして、それらの端末が古くなったとしても、現代のUnicesにはまだある)理由です。

termio/termiosはそれぞれ、Unixのttyドライバーを制御するための古いインターフェースと新しいインターフェースです。 termio(s)ioctlでは、入力、出力、制御フラグを指定します。これは、シリアルラインの電気信号を入出力文字に処理する方法と、エコーなどのドライバーの内部動作を指定します。行エディタ...それらのほとんどは、現代のUnix VGAコンソールや疑似端末のような仮想端末に適用されます。

termio(s)のコマンドラインインターフェイスは、sttyコマンドです。

大文字の端子を処理するために、3つのtermio(s)フラグが関係しています。

  • IUCLC(大文字から小文字への入力):入力文字は入力時に小文字に変換されます。つまり、端末から送信されたAaと見なされます。つまり、これをオンにすると、VT50でLSと入力できるようになり、シェルは/dev/ttyXからlsを読み取ります。 sttyコマンドを実行することもできます。
  • ここで、IUCLCのみとターミナルechoを使用して、LSと入力すると、ドライバーはlsをターミナルに送信し(入力した内容を確認できるため)、表示できないため、OLCUC(小文字の小文字を大文字に出力)も必要ですケース)、つまり、端末に送信する前に小文字を大文字に変換する必要があります。
  • これで、VT50からUnixを操作できるようになりましたが、ここで大文字を入力したい場合はどうでしょうか。そこで、xcaselocalフラグを使用します。これにより、(正規入力モードのみで)\Aと入力して大文字のAを送信できます。出力では、大文字のA\Aとしてレンダリングされます。 (Linuxでは実装されていません)

sttyコマンドには、対応するiuclcolcucxcaseの設定と、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コマンドです。

これらのiuclcolcucxcaseフラグはPOSIXで指定されていました(そして、これがおそらくLinuxに実装されている理由です(古い端末をLinuxシステムに(楽しみ以外の目的で)接続したことがあるのではないかと真剣に疑っていますが)。 POSIX:2001で削除されました。

4

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のうち(私はほとんど知りませんでした)。

2
vonbrand

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つの列にあるようなもの。

0
Emanuel Berg