Showing all posts tagged linux:

シェルがたくさんありすぎていまいち掴めなかったので関係性を整理してみた

シェルといえばbashですよね。笑

shebangはしっかり指定しましょうとか各所で言わていますが、今まではサボって適当に !/bin/sh とか指定していました。
きょうは時間ができたので、有名ドコロのシェルが何からどう派生してきたのか一念発起して調べてみました。

参考文献はWikipediaです(キリッ

僕と同じく sh を適当に設定している人は多いと思いますが、たんなる sh は今では他のシェルへのエイリアスなので、その先が何なのかを確認しなければなりません。bashは sh をさらに高機能にしたもので、もっとも普及しています。大抵のLinuxディストリビューションや、Mac OSのターミナルで標準に指定されているシェルです。

dashは、ubuntuを含むdebian系Linuxディストリビューションで標準に指定されているシェルです。親のashは、多くのBSD系で標準のシェルです。また、kshを親に持つzshもあります。kshやzshはそれほど標準のシェルに採用されているわけではありませんが、zshはbashのように振る舞う互換モードを備えていて、その便利さからファンも多いです。

bashとdashとzshはそれぞれ祖先に sh をもっており、 sh の機能については互換性があります。これに対して、祖先が sh でないものもあり、その一つがcshです。cshはC言語風に書けるシェルで、いまではcshから派生したtcshが多く利用されます。cshはshと同じthompson shellを親に持っており、そのためcshとshとは互換性がありません。

そんなややこしい関係性があるシェルの世界ですが、この図さえあればもうshebangに困りませんね。ご査収ください。

参考:Wikipedia シェル, Bourne Shell, bash など

コマンドラインから直接環境変数を登録する

あたらしく環境変数を登録したいとき、毎回viエディタで~/.bash_profileを編集するより、コマンドラインから一発で登録できれば簡単です。

echo 'export PATH=$PATH:/usr/local/bin/activator-1.2.12' >> ~/.bash_profile

余談

ファイルに追記するには>>を使います。

また、ダブルクォーテーションで囲ってしまうと、エスケープされずに既存の環境変数が展開されてしまいます。これでは重複してしまい消したり編集する際に困りますので、かならずシングルクォーテーションで囲むようにしましょう。```
$ echo "export PATH=$PATH:/usr/local/bin/activator-1.2.12" >> ~/.bash_profile

export PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin/activator-1.2.12
```