Showing all posts tagged mac:

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

シェルといえば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 など

Macのカレンダーアプリで誕生日の通知をオフにする

私は、Macでは純正カレンダーアプリを利用しています。誕生日についての通知がオフにしたはずなのに相変わらず届くので、設定を再確認しました。

結論から言えば、Google Calendarの誕生日通知はオフになっていましたが、"On My Mac"の誕生日通知がオンになっていました。

カレンダーアプリの設定画面:

facebookと連携した名残で、フレンドの誕生日情報が大量に登録されています。ほぼ毎日通知されるのですが、毎度反応するわけにもいきませんからね。

不要な通知は積極的にオフにして快適に過ごしたいものです。

javaのクラスパスの設定

普段はIDEを使い、ビルドツールを駆使して開発をしているのであまりjarファイルの置き場がどうのこうのといったことをする必要はないのですが、複雑なプロジェクトゆえ各種IDEでビルドできないという事態が生じた場合に、手っ取り早く手元でコンパイルしたいという需要もあるかと思います。

そこで障害となるのが依存性の解決、そしてクラスパスの設定です。私はjavac Hello.javaと入力して「パッケージ hoge.hoge.hoge は存在しません」と言われて凹み、さらに設定で難儀したので備忘録的に共有します。

WindowsですがMacも同じです。

クラスパスにフォルダを追加する

ファイル単体をクラスパスに追加したい場合は

CLASSPATH=C:\Users\blackhorry\libs\commons-io.jar

でOKですが、ディレクトリを指定したい場合は?

CLASSPATH=C:\Users\blackhorry\libs\*

アスタリスクが必要なので注意しましょう。また、この指定方法ではjarファイルは含まれますがclassファイルが含まれません。

classファイルを含めたい場合は以下のように指定します。順番が前後すると読み込まれる順番も変わります。

CLASSPATH=C:\Users\blackhorry\libs\*;C:\Users\blackhorry\libs

CLASSPATH=C:\Users\blackhorry\libs;C:\Users\blackhorry\libs\*

参考
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/classpath.html

自作ソースをクラスパスに追加する

com/hoge/app/Hello.javaというディレクトリ構成になっている場合、を想定します。まずはコンパイルしたいファイルのあるディレクトリに移動します。

cd com/hoge/app

コンパイルする前に、クラスパスの設定が必要です。カレントディレクトリ直下をクラスパスに追加しようとして

CLASSPATH=.

と指定してjavac Hello.javaすると、ハマります。ここで確認すべきはHello.java内でパッケージがどう指定されているかです。

たとえばpackage com.hoge.appとして指定されている場合(大抵そうですよね)、カレントディレクトリを.として指定した結果com/hoge/app/com/hoge/appがクラスパスに追加されてしまいます。つまりディレクトリ階層を遡る必要があるので、正しくは以下のようにクラスパスを設定します。

CLASSPATH=..\..\..\