シェルの環境

INPUT · スライド

`.profile` に書いて残す

01 / 08

作ったものは消える

前の回で作ったエイリアスを、もう一度呼んでみて。

~ $ ll-sh: ll: not found

無いね。端末を閉じると消えるんだ。変数も同じだよ。

VAR=値       消えるexport VAR   消えるalias l=…    消えるPATH に足す  消える

章10でやったこと、全部消えてしまうんだ。毎回作り直すのは無理があるでしょう。

そこで、こういう仕組みがあるんだ。

> 端末を開いたときに、決まったファイルを読んでくれる

そのファイルに書いておけば、開いた時点でもう設定が効いている。今日はその場所を覚えるよ。

これができると、自分用のシェルになるんだ。同じ Linux でも、人によって使い勝手が違うのはこれのせいだよ。

02 / 08

~/.profile に書く

読まれるファイルは、これだよ。

~/.profile

名前が . で始まっているね。章1でやった隠しファイルだから、ls -a でないと見えないよ。

~ $ ls -a.  ..  .profile

中身はふつうのコマンドの列だよ。特別な書き方は無いんだ。

export EDITOR=/bin/viPATH="$PATH:$HOME/bin"alias l='ls -1'alias h5='head -5'

打つのと同じことを書くだけでしょう。あなたが前の回で打ったものが、そのまま並んでいるね。

作り方も、いつもの道具でいいよ。

~ $ echo 'alias l="ls -1"' > ~/.profile~ $ echo 'export EDITOR=/bin/vi' >> ~/.profile

1行目は >、続きは >> だね。章4でやった区別だよ。うっかり > で足すと、前に書いたものが消えてしまうから気をつけてね。

もちろん vi で書くこともできるよ。それは章13でやるね。

03 / 08

. で今すぐ読ませる

書いたら試したいよね。でも端末を閉じ直すのは面倒でしょう。

今すぐ読ませるコマンドがあるんだ。

~ $ . ~/.profile

先頭の .(ドット1つ)がコマンドだよ。読みにくいけれど、これで「このファイルを今のシェルで読め」という意味なんだ。

~ $ . ~/.profile~ $ l(さっき書いたエイリアスが動く!)

source と書いても同じだよ。

~ $ source ~/.profile

意味は同じで、source のほうが読みやすいね。ただし . はどのシェルにもあるので、. を覚えておくほうが確実だよ。

ここで大事な違いがあるよ。sh で動かすのとは違うんだ。

sh ~/.profile      子シェルで動く → 今のシェルに残らない. ~/.profile       今のシェルで動く → 残る

前の回で「子には伝わるが、親には戻らない」とやったね。設定を読むときは今のシェルで動かさないと意味が無いんだ。だから . を使うんだよ。

04 / 08

/etc/profile は全員ぶん

実は、あなたの .profile より前に読まれるものがあるよ。見てみようか。

~ $ cat /etc/profileexport PATH="/bin:/sbin:/usr/bin:/usr/sbin"...export EDITOR='/bin/vi'

PATH はここで決まっていたんだ! 章10の2本目で echo $PATH を見たときの中身が、このファイルから来ていたんだよ。

2つの場所の違いはこれだよ。

場所だれのため書けるのは
/etc/profileこの機械の全員root だけ
~/.profile自分だけ自分

読まれる順もこの順だよ。

1. /etc/profile     全員ぶん2. ~/.profile       自分ぶん

あとから読まれるほうが勝つので、自分の .profile で上書きできるんだ。

/etc/profile   EDITOR=/bin/vi~/.profile     export EDITOR=/bin/nano   ← こちらが効く

章7でやった「root と自分」の分かれ目が、設定ファイルにもあるということだね。共有のものは触らず、自分のものを足すのが作法だよ。

05 / 08

何を書くとよいか

書くものは、だいたいこの4つだよ。

1. PATH に足す2. エイリアス3. 使う道具の指定(EDITOR など)4. 見た目(PS1)

1番はこう書くよ。

PATH="$PATH:$HOME/bin"

$PATH: を頭に付けるのが大事だね。忘れると今までの場所が消えて、ls すら動かなくなるよ。章10の2本目でやった事故だね。

もう少し丁寧に書くこともできるよ。

[ -d "$HOME/bin" ] && PATH="$PATH:$HOME/bin"

[ -d … ] は「入れ物があるか」を確かめる形で、&& は「前がうまくいったら次をやる」だったね。つまりあるときだけ足すという意味だよ。

コメントも書けるよ。

# watashi no setteialias l='ls -1'

# から行末までは無視されるんだ。半年後の自分に向けて理由を書いておくと助かるよ。

見た目を変えることもできるよ。

export PS1='$ '

いま出ている $ はこれだね。/etc/profile の中にも書いてあったでしょう。

06 / 08

書きまちがえても大丈夫

心配なことがあるよね。書きまちがえたら開けなくなるのでは? と。

試してみようか。

~ $ echo nai-komando > ~/.profile~ $ . ~/.profile-sh: /home/manabiya/.profile: line 1: nai-komando: not found

エラーは出るね。でもシェルは動き続けているでしょう。

エラーの行だけ飛ばして、次の行から続ける

こういう作りなんだ。だから1行まちがえても、他の設定は効くよ。

いちばん危ないのはこれだよ。

PATH="$HOME/bin"        ← $PATH: を忘れた

これをやると lscat も動かなくなるね。でも直せるよ。

~ $ PATH=/bin:/sbin:/usr/bin:/usr/sbin~ $ /bin/vi ~/.profile

手で PATH を戻せば、また道具が使えるんだ。章10の2本目で「壊して直す」をやっておいたのは、このためだったんだよ。

もう1つの逃げ道も覚えておいてね。

~ $ mv ~/.profile ~/.profile.dame

名前を変えれば読まれなくなるので、まっさらな状態に戻せるよ。消さずに退避するのが上手なやり方だね。

07 / 08

いろいろな名前を見かける理由

調べていると、いろいろな名前が出てくるよ。

.profile        sh 系の共通.bash_profile   bash のログイン用.bashrc         bash の対話用.zshrc          zsh 用

多すぎて混乱するでしょう。整理するとこうだよ。

どのシェルか  ×  どういう起動か

この掛け算で名前が分かれているんだ。

ログイン用    入ったとき1回だけ読む対話用        端末を開くたびに読む

この環境では ~/.profile だけ覚えておけばいいよ。使っているシェルは1つだし、$ENV も使っていないからね。

本物のパソコンで困ったら、こう調べるといいよ。

~ $ echo $0        いま何のシェルか~ $ ls -a ~        どの設定ファイルがあるか

まず自分の足場を確かめるでしょう。名前を暗記するより、こちらのほうが役に立つよ。

そして考え方はどのシェルでも同じなんだ。

打って試す  →  よかったら設定ファイルに書く  →  次から自動

この流れさえ分かっていれば、ファイル名は調べればいいだけだね。

08 / 08

さあ、打ってみよう

この回で使う形をまとめておくね。

ls -a ~                隠しファイルを見るcat ~/.profile         中身を見るecho '…' > ~/.profile   1行目を書くecho '…' >> ~/.profile  続きを足す. ~/.profile           今すぐ読ませるcat /etc/profile       全員ぶんの設定を読む

この回が章10の最後だよ。振り返っておくね。

覚えたこと
1変数と export
2PATH とコマンドの探し方
3引用符の使い分け
4広がる順番
5エイリアスと履歴
6.profile に残す

1〜5で打って試し、6で書いて残すでしょう。この形は、これから何回も出てくるよ。

次の章はいよいよスクリプトだよ。

.profile     開いたときに読まれる手順スクリプト   自分で呼んで動かす手順

どちらも手順をファイルに書くという同じことなんだ。つまりあなたは今日、初めてのプログラムを書いたことになるよ。では打ってみよう。