標準コマンドにエイリアスを使用することをお勧めしないのはなぜですか?

標準コマンドにエイリアスを使用することをお勧めしないのはなぜですか?

たとえば、~/.bashrcファイル(またはそれに対応する項目)で見た一般的なエイリアスは次のとおりです。

alias rm='rm -i'

しかし、私は人々がこれを拒否するのを見ました。

  1. 他のシステムにはエイリアスがない可能性があり、注意していないため、誤ってrm重要な項目を削除しました。[1]
  2. このエイリアスを使用すると、本質的にすべてのコマンドの後にorを入力するように自分自身を訓練します。yこれは全体的な目的を無効にします。yesrm

これに反対する他の理由はありますか?一部のプログラムがrm呼び出すのではなく、単に呼び出して\rmエイリアスを使用すると問題が発生する可能性がありますか?

私はrmこれを単に例として使用していますが、別名cpmv別名で覆われたコマンドなどの他のコマンドも見たことがあります。個人的には、次のエイリアスを使用するようにゆっくりと訓練していますrm -i

alias trash=`mv -v -t $HOME/.Trash`

答え1

bashを使用すると仮定すると、非対話型bashシェルはorを取得できないため、スクリプトに問題はあり~/.bashrcません~/.bash_profile。スクリプト)。ただし、スクリプトをソーシングすると問題が発生する可能性があります。

$ alias echo='command echo foo'
$ cat > script << 'EOF'
> #!/bin/bash
> echo bar
> EOF
$ chmod a+x script
$ ./script
bar
$ . ./script
foo bar

あなたの質問は、既存のコマンドのエイリアシングに関する一般的な問題のほとんどをカバーしています。主な問題は、一見同じように見慣れない状況が大きく異なる結果を生み出す可能性があることです。たとえば、エイリアスrmtoはrm -i良い意図を持っていますが、実際にはあなたが言及した理由のために悪いです。

答え2

「そうではないと助言する理由は他にありますか?」

確かに:

(3) いつか私が積み重ねてきた基盤を加えたいからだ。[---------]エイリアス標準コマンドが標準コマンドであるにもかかわらず、エイリアス標準コマンドを使用することについて他人を罰する妄想的な人々。

しかし、厳密に言えば、これは単なる警告です。あなたが破滅の深いピットに陥らないと信じているなら、注意して進み続けます。

個人的には、私は標準コマンドにエイリアスをほとんど追加しません。私は少し編集証的で肛門保守的なので、いくつかの変形を使用します。しかし、私が見つけた良い用途には、rootまたは他のユーザーとして頻繁にログインするシステムで誤って/遅くrootとして実行したくないものがあります。

alias irc="echo \"No you don't!\""

または

alias irc="su irc_user"

答え3

極端な例として、標準コマンドにエイリアスを指定するのが有害である可能性がある理由を説明するために、標準コマンドにエイリアスを指定します。

alias ls='rm'

明らかに、これはいつか不快な驚きを引き起こすので、悪いことです。同様に、標準コマンドをエイリアスに置き換えると、予期しない不幸な事故が発生する可能性があります。

しかし、ほとんどすべてのUnix管理者がキャリアのある時点に直面する一般的なシナリオを紹介します。

将来のある日、あなたは新しい仕事を始め、他の人が構築した新しいシステムで働くでしょう。土曜日の夜明け3時は心が澄んでおらず、間違えやすいです。標準環境は使用できません。実際、あなたはルートです。

rmこの点を考えると、 'is't'のエイリアスを覚えていますかrm -i?ログインするたびに特別な別名を確認しますか?ルートの環境を変えれば、仲間たちはその変化に満足するでしょうか?

正直言って、私はそれについてフェンスにいます。私はキャリアの間に何千ものシステムで作業してきました。

エイリアシングは非常に一般的rmであり、rm -iこれにより多くの問題を防ぐことができますが、誤って削除されたファイルを回復するには多くの驚きと追加の作業時間が必要です。

だから今、私は通常のシステムコマンドにエイリアスを使用しないようにします。代わりに、エイリアスと関数を使用して、シェルで簡単に実行できない操作を実行します。これで、エイリアスに次の文字を追加する傾向があります。

# List long, with color or special characters, depending on OS
alias  ll='ls -l'
# Long, with metacharacters, show dotfiles, don't show . and ..
alias lll='ls -lA'
# Long, with metacharacters, show dotfiles, show . and ..
alias lla='ls -la'
# List just the dotfiles
alias  l.='ls -l -Ad .????*'

# Useful greps
#alias hgrep='history |grep ${*} |grep -v $$'
alias greph='history |grep ${*}'
alias grepp='ps -ef |grep ${*}'

### Highlight some text.
# From http://unix.stackexchange.com/questions/366/convince-grep-to-output-all-lines-not-just-those-with-matches/367#367
highlight () { grep --color -E "$1|$" $2 ; }

新しい慣行に適応するのに時間がかかるため、最終的なエイリアスを本当に削除する必要があるかもしれません。

# For safety!
alias rm='rm -i'

答え4

名前変更エイリアス(たとえば)の標準コマンドは、rm=rm -iエイリアスが利用できない場合は確かに驚くべき結果をもたらします。私はこのようなコマンドを使用しない方が良いです(複数の痛みを伴う経験を通して;-)、すべてのコマンドを2回読んだり、潜在的に破壊的なコマンドであれば3回読んだりすることにrm慣れましたmv。これらのエイリアスは自動的に「rm foo」ENTER「y」を生成します。こんな! !何でも(毎回追加のキー入力が必要です)

しかし、それは私です。おなじみの環境(他のコンピュータ、他のユーザー...)で実行したくない場合、どこにいてもお気に入りのエイリアスをインストールしたい場合は、自由にインストールしてください。私たちが知っているように、Unixはユーザーに自殺するのに十分なロープを提供します。

関連情報