Ubuntu 16.04では、次のコードを追加しました/etc/bash.bashrc
。
alias ll="ls -la --group-directories-first"
その後、再起動します。
/etc/bash.bashrc
注:1つのファイルにすべてのエイリアスが必要で、すべてのユーザーが使用できるため、これを使用しています。
私の意図は、「基本」エイリアスをオーバーライドすることですll
。ただし、ディレクトリとファイルを含むディレクトリに移動して実行すると、ll
リストが表示されます。いいえディレクトリはファイルの上にソートされます。つまり。
私は何が間違っていましたか?
答え1
エイリアスはll
defaultで定義されています.bashrc
。
エイリアス定義はコマンドです。 Bashは、コマンドを順番に実行するコマンド型言語です。同じ別名の定義が複数ある場合、シェルが定義の1つを実行するたびに別名が上書きされます。したがって、最後の定義が勝ちます。
Bashが起動したら、まずシステムファイルを読み、次に/etc/bash.bashrc
ユーザーファイルを読みます~/.bashrc
。したがって、の定義は~/.bashrc
の同じエイリアス定義をオーバーライドします/etc/bash.bashrc
。 .NET/etc/bash.bashrc
で上書きを防ぐために何もできません~/.bashrc
。
ユーザーに便利なエイリアスを与えることは意味がありません。これがinではなくinでll
定義された理由です。したがって、優先定義をシステムファイルに配置するのではなく、ユーザーファイルに配置します。~/.bashrc
/etc/bash.bashrc
デフォルト値を変更できます.bashrc
。つまり、/etc/skel/.bashrc
このファイルは、ユーザーアカウントの作成時にユーザーのホームディレクトリにコピーされます。ファイルを変更しても、/etc/skel
既存のアカウントには影響しません。しかし、これもあなたが定義するのは個人的な好みなので、良い考えではありません。
答え2
/etc/bash.bashrc
すべてのユーザーが利用可能
~/.bashrc
ホームフォルダを持つユーザーにのみ適用されます。
ll
したがって、でエイリアスを変更し/etc/bash.bashrc
て実行すると、で定義されたエイリアスがの定義よりも優先されるため、で定義されたll
エイリアスの出力が得られます。~/.bashrc
~/.bashrc
/etc/bash.bashrc
簡単に言うと。新しいのエイリアスですが、/etc/bash.bashrc
上書きするにはを変更してください~/.bashrc
。
編集する:
すべてを1つのファイルに含めるには、すべてのユーザーのすべてのエイリアスおよび/~/.bashrc
~/.bash_profile
または~/.profile
すべてのユーザーのファイルからすべてのエイリアスを削除し、このファイルにすべてのエイリアスを追加すると、/etc/bash.bashrc
問題なくグローバルエイリアス構成が生成されます。
編集2:
新しいユーザーが作成されたときにデフォルトのエイリアスが設定されないように、デフォルト設定を/etc/skel/.bashrc
作成、編集、コピーします。.bashrc
編集提案をありがとう@user4556274に感謝します。
答え3
/etc/bash.bashrc
私はこれが問題ではないと確信しています。あなたが探しているファイルは$HOME/.bash_profile
OR$HOME/.profile
またはあなたが使用できるものですが、これがあなたが達成したいものに適したファイルだと$HOME/.bashrc
思います。profile
.bash_profile
との違いについては、.bashrc
以下を参照してください。http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html
sourceに.profile
以下.bash_profile
を追加します.bash_profile
。
if [ -f ~/.profile ]; then
. ~/.profile
fi
別の潜在的なオプションは、代わりに関数を置くことですll
。私は、関数が同じ名前を持つすべてのエイリアスセットよりも優先されると思います。function
/etc/bash.bashrc
alias
ll () {
ls -la --group-directories-first
}