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
コマンドを実行することもできます。IUCLC
aloneと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
は「マッチ」のためだと思います。)