私はしばしば単一文字のエイリアスを作成することを発見します。なぜなら、エイリアスは入力時間を節約するために存在するからです。これを避けるべきかどうか疑問に思います。どんな紛争も知らない。
答え1
避けるべきこと:
- 単一文字名を使用する標準または一般的なコマンド:(
w
ログインユーザーアクティビティを表示)、X
(X Window System Server)、R
(Rプログラミング言語ソルバー)、[
(に似ていますtest
) - シェルまたは汎用シェルに組み込まれている関数:
[
、、、、、、.
:
-
r
- シェルキーワード:
{
、、、}
!
?
と*
ワイルドカード- シェル構文の特殊文字:
`"$&();'#~|\<>
、(一部のシェルにもあります^
)%
、SPC、TAB、NL(および一部のシェルの他のスペース) - ASCII以外の文字は使用しないことが最善です(これらの文字はロケールによってエンコードが異なるためです)。
- 制御文字(上記のTABおよびNLを除く)は入力が容易ではなく、状況によっては常に表示されないか、または異なるように表示されるため、使用しないことをお勧めします。 NUL文字
zsh
に対してのみエイリアスを定義して使用できます。 (バイト値が1の制御文字)のエイリアスを定義できますが、bash
明らかに使用しません。^A
単一文字名でコマンドを検索するには:
bash
:(compgen -c | grep -x . | sort -u
コマンド名に改行文字が含まれていないと仮定すると、キーワードも含まれます。)zsh
:(type -m '?'
またはtype -pm '?'
機能/エイリアス/組み込み機能/キーワードが必要ない場合)。Debian または派生製品: パッケージ内の単一文字名のコマンドを探します。
$ apt-file find -x '/s?bin/.$' coreutils: /usr/bin/[ e-wrapper: /usr/bin/e python3-q-text-as-data: /usr/bin/q r-base-core: /usr/bin/R r-base-core: /usr/lib/R/bin/R r-cran-littler: /usr/bin/r r-cran-littler: /usr/lib/R/site-library/littler/bin/r wims: /var/lib/wims/public_html/bin/c xserver-xorg-core: /usr/bin/X
答え2
最も簡単な方法は、その名前の項目がすでに存在することを確認することです。私のシステムでは:
$ for char in {A..z}; do type "$char" 2>/dev/null; done
R is /usr/bin/R
X is /usr/bin/X
[ is a shell builtin
l is aliased to `ls -CF'
w is /usr/bin/w
私が知っている限り、これは関連するすべての衝突を示しています。
- 次のような別のエイリアス
l
- シェル予約語
- 機能
- シェル組み込み関数
w
と同じファイルコマンド[
答え3
挨拶:「このようなことを避けなければならなかったのだろうか?」
他の回答で述べたように、エイリアスでオーバーライドするコマンドが使用したいコマンドでない限り、技術的な問題はあってはなりません。
このようなエイリアスを使用するときの最大のイライラは、まだ.bashrcをコピーしていないコンピュータに友達やSSHを接続するのに役立ちます。あなたが開発したすべての筋肉の記憶はあなたを水から出た魚のように感じさせるでしょう。あまりにも混乱しているので、エイリアスを最小限に抑えようとしています。
答え4
エイリアスを使用するターゲットによって異なります(例:誤って別のエイリアスが実行された場合、どのくらい大きな問題になりますか?)、そしてどのくらいの頻度で間違いを犯すか。
たとえば、
- 間違ったキーを押すことがほとんどない場合でも、
r='rm -rf *'
andを使用するのはおそらく非常に悪い考えです。t='ls -l *tar*'
- 使用に
r='file *.png | grep RGB'
問題t='ls -l *tar*'
がない可能性があります。
後者の場合、代わりに入力するとr
(キーボードを閉じると間違って入力するのが簡単です)、t
望ましくない結果が出力され、正しいエイリアスを簡単に入力できます。ただし、前者の場合、代わりにr
を入力するとt
不要なダメージを受けます。
したがって、ポイントは次のとおりです。単一文字のエイリアスを使用している場合は、読み取り専用ジョブにのみ使用してください(データを変更できるジョブには使用しないでください。誤って実行すると問題が発生する可能性があります)。