Bashエイリアスは、個々のホームディレクトリの.bash_aliases
または.bashrc
ファイルに配置する必要があります。グローバルbashエイリアスを作成する必要がある場合、それらはに入ることができますが/etc/bash.bashrc
、多くの場合、単純にそれらをに追加する.bash_aliases
か、.bashrc
ファイルを/etc/skel
新しく作成したユーザーに継承されるようにするのが最善です。
事実上、常に間違っ内に別名を定義するために.profile
、.bash_profile
または/etc/profile
。
理由を理解するには、これらの各ファイルからコマンドが実行される状況を理解する必要があります。これについては誤解がありますが、以下で対処します。
エイリアスを複数のユーザーに定義したい場合でも、個々のユーザーに対してエイリアスがどのように定義されているかに精通している必要があります。これにより、必要なことを行う最適な方法を決定できます。
個々のユーザーのエイリアス
特にGUIを使用する場合、対話型シェルのほとんどはおそらく非ログインシェルです。GUIを使用したことがない場合でも、おそらくある程度の頻度で非ログインシェルを使用する可能性があります。これらのシェルでエイリアスを機能させたいでしょう。
特に、仮想コンソールまたはSSHを介して非グラフィカルにログインする場合は、おそらくログインシェルを使用することがあります。そのため、対話型ログインシェルでもエイリアスを機能させる必要があります。
対話型の非ログインシェルが起動すると.bashrc
、ユーザーのホームディレクトリをソースとします。Ubuntuのデフォルトでは、各ユーザーの.bashrc
ソース.bash_aliases
が存在する場合、ソースです。
- ファイルを入手するには、その内容を現在のシェルで実行します。ソースされたファイルで行われたシェル環境への変更は、ファイル内のすべてのコマンドが実行された後でも保持されます。
Ubuntuのデフォルトのコメントを読むと、エイリアスがまたはに入る.bashrc
ことが公式に意図されていることがわかります。すでにいくつかのエイリアス定義が含まれており(それらを表示するために実行されます)、新しい定義をどこに置くかについて明示的なアドバイスを与えます.bashrc
.bash_aliases
.bashrc
grep '^[[:blank:]]*alias' ~/.bashrc
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
しかし、対話型ログインシェルはどうでしょうか。代わりに.bashrc
、ログインシェルソース.profile
。
- ...
.bash_login
存在しない限り、代わりにソースされます。
- ない限り...
.bash_profile
存在している、そしてそれは代わりに供給されます。
しかし、良いニュースは、Ubuntuのデフォルトで、ということであるのコマンドが.bashrc
しますまた、対話的なログインシェルで実行するデフォルトのため、.profile
現在のシェルはbashのかどうかをチェックする(そして場合.bashrc
に存在する)、そうであれば、ソース.bashrc
:
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
ユーザー.bash_aliases
は、ホームディレクトリで新しいbashエイリアスを定義することをお勧めします(まだ存在しない場合は作成します)。これは、ユーザーごとにエイリアス定義を永続的にするための特にクリーンでシンプルな方法です。
エイリアスは.profile
、非ログインシェルでは未定義のままになるため、定義しないでください。多くのbashシェルの環境とは異なり、エイリアスは子シェルにエクスポートされません。
ek@Io:~$ alias hi='echo "Greetings, $USER!"'
ek@Io:~$ hi
Greetings, ek!
ek@Io:~$ bash
ek@Io:~$ hi
hi: command not found
特に、デフォルトでは、ほとんどのデスクトップ環境.profile
ではグラフィカルログインが使用されますが、
- これは必ずしもbashシェルによって行われていないので、エイリアスの定義があっても処理されないことがあり、さらに重要なことと
- エイリアス定義が処理されても、それらは子プロセスに渡されません。特に、ターミナルウィンドウを開いて作成されたシェルには渡されません!
エイリアスは.bash_profile
.bash_login
、まったく同じ理由で(または)で定義されるべきではありませんが、別の理由でも定義されるべきです。これらのファイルの1つを単純に作成し、その中にエイリアス定義を置くだけで、コードの.profile
実行が妨げられます!
.bash_profile
または.bash_login
実際に役立つ状況では、通常.profile
、その中のどこかにソースがあり、それがその問題を解決します。(その後、唯一の問題は、と同様に.profile
、エイリアスを定義する.bash_profile
か、.bash_login
正しく機能しないことです。)
新しい個人ユーザーのエイリアス、自動的に
実際の人間を表すことを目的としたタイプのユーザーアカウントが作成されると、通常、新しいディレクトリがホームディレクトリとして機能するように作成されます。/etc/skel
その後、コンテンツがホームディレクトリにコピーされます。これは、複数のユーザーがホームディレクトリにある類似の構成ファイルで開始する方法です。Ubuntuのでは、これは、.profile
、.bashrc
、およびいくつかの他のファイル。
新しいユーザーに対して定義されるエイリアスを変更するには、単にエイリアス/etc/skel/.bash_aliases
を作成するか(作成する必要があります)またはを使用します/etc/skel/.bashrc
。
既に存在するファイルを編集する場合は、/etc/skel
最初にバックアップすることをお勧めしますが、バックアップをに配置しないでください。そうしない/etc/skel
と、新しいユーザーのホームディレクトリにコピーされます。
これは、複数のユーザーに新しいエイリアスを追加するのに最適な方法です。既存のユーザーは、単に自分でエイリアスを追加できます。でエイリアスを定義する場合/etc/skel/.bash_aliases
、単にそのファイルにそれらを向けることができ、それらはホームディレクトリにコピーする(または独自のカスタム.bash_aliases
ファイルに追加する)ことを選択できます。
ユーザーがエイリアスの定義を解除するのは簡単です。また、エイリアスは非常に堅牢ではありません。特定の状況でのみ機能します。すべてのユーザーに対して常に機能する新しいコマンドを作成する必要がある場合は、そのコマンドをエイリアスとして実装しないでください。また、エイリアスを望まないユーザーにエイリアスを強制的に強制することはできませんunalias
。
グローバルエイリアス、すべてのユーザー向け
このアプローチを避けることをお勧めしますが、グローバルファイルでエイリアスを定義できます。これらは、対話型の非ログインシェルと対話型ログインシェルの両方に対して定義されます。その理由は、ある前に、ユーザーのホームディレクトリ内のファイルのいずれかが供給されています: /etc/bash.bashrc
- ログインシェル(およびログインシェルと、ログインシェルのように動作する他のプロセスのみ)は、コマンドを
/etc/profile
自動的に実行します。
- 非ログインシェルのみがコマンドを
/etc/bash.bashrc
自動的に実行しますが、
- Ubuntuのデフォルトで
/etc/profile
は、実行中のシェルがbash(および/etc/bash.bashrc
存在する場合)であるかどうか、および存在する場合はsources がチェックされます/etc/bash.bashrc
。
これは、シェルがbashである場合のデフォルトのユーザーごとの.profile
ソースの指定方法に似ています.bashrc
(上記で説明)。
これのデフォルトの実際のコードは次の/etc/profile
とおりです。
if [ "$PS1" ]; then
if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1='\h:\w\$ '
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
そのブロックは他のタスクも実行します。具体的には、外側のif
現在のシェルは、チェックシェル可能性が高い(プロンプトテキストが空であることをチェックすることにより)対話する場合、次にチェックbashのソースがある場合/etc/bash.bashrc
、それがあれば、そうでない場合は、いくつかの作業を行い、そのbashのための、すでにで行われてい/etc/bash.bashrc
ます。
あなたはすべきではないでグローバルエイリアスを定義し/etc/profile
、ユーザーが自分の地元でそれらを定義するべきではないのと同じ理由のために.profile
S:あなたがしなければ、彼らは唯一のログインシェルのためではなく、その子の殻のために定義されます。
最後に、デフォルトのper-userとは異なり.bashrc
、デフォルト/etc/bash.bashrc
ファイルにはエイリアスに関する情報は含まれていません。ユーザーがファイルを編集したり無効にしたりすることができない場合、ユーザーにエイリアスを与えることはやや珍しいことです。(もちろん、彼らはまだすることができ、自分の地元でそれらの定義をオーバーライドすることによって、それを行う.bashrc
、.bash_aliases
または他の場所。)
参考文献