bashを使うときに、使いやすくするための設定をします。
設定ファイルについて(引用:bashの仕様)
bashはログインシェルとして起動すると、/etc/profile、~/.bash_profile、~/.bash_login、~/.profileの順番で各ファイルをログイン時に一度だけ読み込んで実行します。
ユーザーがログインした後に、ターミナルエミュレータを開くことで起動するシェルを実行したり、コマンドラインから別のシェルを起動したりすることも可能です。これを非ログインシェルと呼びます。
bashは非ログインシェルとして起動した場合、~/.bashrcがあれば起動のたびにこれを読み込んで実行します。
Linux教科書 LPIC レベル1 スピードマスター問題集 Version5.0対応
説明の追加
英語では、login shellとnon-login shellとなります。
設定ファイルについて
Macを使う限りにおいては、
.bash_profileに. ~/.bashrcと一行書き、
.bashrcに設定を書き連ねる、
という方針で良いと思います。
Macでは、
.bash_profileにecho ‘I am your .bash_profile.’と書き、
.bashrcにecho ‘I am your .bashrc.’と書いて、
ターミナルを起動すると、
I am your .bash_profile.だけが表示されます。
2つ以上のターミナルを起動していっても同様の結果となります。
tcshまたはbashを使っていて、bashとタイプしてEnterを押すと、’I am your .bashrc.’だけが表示されます。
Macで使いにくい設定になることがないようにと考えると、上記の方針が無難と思います。
余談 1
実際に1つの開発で、協力会社のある担当からcshスクリプトが送られてきて、違う担当からbashスクリプトが送られてきたことがあります。
こういう状況のときは、tcshを使っていて、bashとタイプしてEnterを押す、とするのが最も早いです。
ちなみに協力会社はとても有名な外資系の大企業です。実際にスクリプトを作成したのは、インド人や中国人だったのかもしれません。
シェルスクリプトはshで書け、みんな幸せ、が正解なのですが、そういうことを教えてくれる人や本に出会う機会は少なすぎるので、仕方がないと諦めるしかありません。
余談 2
端末から、計算能力の高い計算機にloginして作業して、作業が終わったらlogoutする、ということを経験しないと、login shellやnon-login shellが何の役に立つのかわからない気がします。
.bash_profile
~/.bash_profile
. ~/.bashrc
shell script内で.
を使って他のshell scriptを呼び出し、shell scriptを実行すると呼び出し元の変数にも影響があります。
source
を使ってshell scriptを実行すると呼び出し元の変数には影響がありません。
.bashrc for Ubuntu
~/.bashrc
PATH=/usr/pkg/bin:$PATH
export PATH
# LANG=C
LANG=ja_JP.UTF-8
export LANG
# LC_ALL=C
LC_ALL=ja_JP.UTF-8
export LC_ALL
LESSCHARSET=utf-8
export LESSCHARSET
HISTSIZE=16384
export HISTSIZE
HISTFILESIZE=262144
export HISTFILESIZE
alias ls="\ls -F"
alias ll="\ls -FAlh"
alias la="\ls -FA"
alias grep="grep -E -n"
alias gr=grep
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\n\$ '
説明します。
LANG=ja_JP.UTF-8
LANG
変数を作ってja_JP.UTF-8
を代入する。
export LANG
LANG
変数を環境変数にする。
PATH=/usr/pkg/bin:$PATH
:
をデリミタとして実行可能なファイルがあるディレクトリの一覧を記述している。
既に$PATH
の中には/bin
や/usr/bin
などなどが入っているはずで、それよりも先に/usr/pkg/bin
に同じ名前の実行可能なファイルがあれば、それを実行しろ、という意味になる。
普通は$PATH:/XXX/YYY
のように後ろに記述する。LD_LIBRARY_PATH
なども同様に記述する。
spaceが無ければ単一引用符や二重引用符を使わなくても期待通りの動作をします。
http_proxy=http://1x2x3.tech:80/
alias ls="\ls -F"
alias
は別名を与える。
\ls
はすでにls
にalias
が付けられている場合にalias
なしのls
にすることを意味する。
ここからはpromptについて説明します。
PS1はpromptです。PS2もあります。PS3もあります。
Ubuntuのdefaultは下記です。
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
${debian_chroot:+($debian_chroot)}は、ほぼすべてと言っていいほとんどの人に関係ないので無視して大丈夫です。
(かと言って、積極的に削除する必要もないのでcopy .bashrcでは残しています。)
\hはhostnameです。
PS1='\[\033[01;32m\]\u\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
32が緑を、34が青を指定しています。
\uがwhoamiで\wがpwdです。
真っ白で構わないなら下記となります。\nを付け加えています。改行です。
PS1='\u:\w\n\$ '
01;32の1を0にしたり2にしたりすると見た目が変わる場合があります。
01;32の0も同様です。
34を36にすると見やすくはなります。端末が黒いと仮定してますが。
.bashrc for ROS2 on Ubuntu
~/.bashrc
PATH=/usr/pkg/bin:$PATH
export PATH
# LANG=C
LANG=en_US.UTF-8
export LANG
# LC_ALL=C
LC_ALL=en_US.UTF-8
export LC_ALL
LESSCHARSET=utf-8
export LESSCHARSET
HISTSIZE=16384
export HISTSIZE
HISTFILESIZE=262144
export HISTFILESIZE
alias ls="\ls -F"
alias ll="\ls -FAlh"
alias la="\ls -FA"
alias grep="grep -E -n"
alias gr=grep
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\n\$ '
最後に. /opt/ros/humble/setup.bashまたはsource /opt/ros/humble/setup.bashなどを追記してください。
ROS2の公式ホームページには「動作確認はen_US
でやってるけどUTF-8
なら動くと思うよ」という記述があります。
なのでja_JP
でも動作すると思います。
自分は動作確認された環境に合わせる派です。
参考
Linux教科書 LPIC レベル1 スピードマスター問題集 Version5.0対応
広告
IT開発関連書とビジネス書が豊富な翔泳社の通販『SEshop』さくらのレンタルサーバ
ムームードメイン
Oisix(おいしっくす)
らでぃっしゅぼーや
珈琲きゃろっと
エプソムソルト