基本トピック
bash_profile・bashrcの概要
シェル(shell)環境は環境変数やエイリアス、関数などを設定することでカスタマイズすることが可能です。また、この設定をスクリプト形式で保存しておくことでbashにログインする度に同じ環境で作業することが可能になります。この際に用いるのがbash_profileやbashrcです。
ファイル名 | 説明 |
---|---|
/etc/profile |
ログイン時に実行され、全ユーザから参照される |
~/.bash_profile |
ログイン時に実行される |
~/.bashrc |
bash起動時に実行される |
bashの設定にあたっては主に上記のファイルを抑えておくと良いです。ユーザレベルでよく使うのが~/.bash_profile`と
~/.bashrcであり、設定を書き込んだ直後に
source`コマンドを用いて読み込む場合もあります。
環境変数とシェル変数
シェルで用いる変数には環境変数とシェル変数があり、それぞれ下記のような特徴を持ちます。
環境変数: シェル自身とシェルから起動される全てのプロセス(コマンドや別のシェル)で有効となる変数を環境変数という。代表的な環境変数にはコマンドを検索するディレクトリリストを格納する`PATH`やユーザのホームディレクトリのフルパスを表す`HOME`などがある。
シェル変数: そのシェル内のみで有効となる変数をシェル変数という。シェル変数は`export`コマンドでエクスポートすることによって環境変数となり、他のシェルでも使えるようになる。
たとえばコマンドライン(CLI)でecho $HOME
を実行すると下記のような出力が得られます。
/home/user_name
シェルのオプション
シェルには様々なオプションがあり、set
コマンドを用いることでオンとオフを切り替えることができます。実行にあたってはたとえばset -o emacs
を実行するとemacs
のオプションがオンになり、set +o emacs
を実行するとemacs
のオプションがオフになります。
オプション名 | 説明 |
---|---|
allexport |
作成した変数を自動的にエクスポートする |
emacs |
emacs風のキーバインドにする |
ignoreof |
Ctrl+D によってログアウトしないようにする |
noclobber |
出力リダイレクトによる上書きの禁止 |
noglob |
メタキャラクタを使ったファイル名展開を無効にする |
vi |
vi風のキーバインドにする |
たとえばset -o noglob
によってnoglob
オプションを有効にするとls *.py
のようなコマンドが全ての.py
ファイルではなく*.py
というファイルに対応するようになります。
また、set -o
を実行することで全てのオプションを確認することができます。
$ set -o
・実行結果
allexport off
braceexpand on
emacs on
errexit off
errtrace off
functrace off
hashall on
histexpand on
history on
ignoreeof off
interactive-comments on
keyword off
monitor on
noclobber off
noexec off
noglob off
nolog off
notify off
nounset off
onecmd off
physical off
pipefail off
posix off
privileged off
verbose off
vi off
xtrace off
エイリアス
bashではエイリアス機能を利用することで下記のようなことができるようになります。
・コマンドに別名をつける
・コマンドとオプションをまとめて新しいコマンドのようにする
・一連のコマンドを簡単に呼び出す
エイリアスの設定は下記のようにalias
コマンドを用いることで行えます。
$ ls
sample1.sh sample2.sh
$ alias ls='ls -l'
$ ls
-rw-rw-r-- 1 user_name user_name 27 mm月 dd hh:mm sample1.sh
-rw-rw-r-- 1 user_name user_name 115 mm月 dd hh:mm sample2.sh
$ unalias ls
sample1.sh sample2.sh
関数
bashの組み込みコマンドのfunction
コマンドを用いることでbashシェル上で利用できる独自の関数を定義することができます。
$ function lsl() { ls -l; }
$ lsl
・実行結果
-rw-rw-r-- 1 user_name user_name 27 mm月 dd hh:mm sample1.sh
-rw-rw-r-- 1 user_name user_name 115 mm月 dd hh:mm sample2.sh