Terminalにおける.tcshrcおよび.loginの読み込み

DeveloperToolsに付属するコマンドをデフォルトで使えるようにするため、PATHを通しました。やりたいことは出来ており、その点では一応解決していますが、疑問が生じたため、教えていただければと思います。
#Terminalは、やってみたいことが出てきた時にコマンドを調べるだけで、知識は乏しいです。
以下に、やったことを記載します。
T1)PATHを通すには‾/.tcshrcに以下を記載すればいいらしい、と言うことで、
setenv PATH /usr/local/bin:<略>:/Developer/Tools
と記載して、Terminalを再起動しました。
しかし、setenvで確認すると通っておらず、例えばCpMacと打ってもcommand not foundと言われました。試しに、tcshを実行すると、ちゃんとPATHが通りコマンドが有効になりました。
このことから、terminal起動時(或いは新規shellを開く時)に.tcshrcを読み込んでいないと考えました(実際には読み込んでいます。後で記載)。そこで、
T2)Preferencesで、"Execute this command:"にチェックを入れて、/bin/tcshをデフォルトにしました。しかし、結果は1)と同じでした。
T3)結局、デフォルトのShellCommandをloginに戻し、‾/.loginの"set path = ()"にパスを追加したところ、
set path = ( ¥
<略>
/sbin ¥
/Developer/Tools ¥
)
デフォルトで通りました。
ここまでは、そういうもの、すなわち、Terminalを起動しただけでは.tcshrcは読み込まず、tcshを実行した時に読み込むものかと思っておりました。ところが、iTermを使ってみたところ、ちょっと違いました。
i1)Default Shell Commandをloginにしている場合は、.loginに記載のパスが通り、.tcshrc記載のパスを有効にするにはtcshを実行しなければならない。すなわち、T1)と同じ。
i2)DefaultShellCommandをtcshにすると、新規ShellWindowを開いた段階で.tcshrcを読み込む。T2)とは挙動が異なります。
また、実際には.tcshrcを読み込んでいることも確認しました。デフォルトのPAGERをlessにするため、.tcshrcに"setenv PAGER less"を加えました。これは読み込んでおり、setenvで確認すると"PAGER=less"と出てきます。従って、T1)およびi1)に関しては、読み込み順と解釈出来ます。.tcshrcを読み込んだ後.loginを読み込み、後から読み込んだPATHが有効になっているのではないかと考えられます。i2)に於いて、.tcshrcのPATHが有効になるのは.loginを読み込んでいないからと推定出来ます。そこで、.tcshrcの記載を
setenv PATH /Developer/Tools
とし、.loginの方を
set path = ( ¥
<略>
/sbin ¥
$PATH ¥
)
とし、$PATHを追加してT1)およびi1)を試したところ、新規ShellWindowを開いた段階で全てのPATHが通っていました(setenvで"PATH=<略>:/sbin:/Developer/Tools"と出る)。よって、読み込み順の問題と結論出来ます。また、この状態でi2)を試すと、"PATH=/Developer/Tools"となります。しかし、T2)を試すと、"PATH=<略>:/sbin:/Developer/Tools"となりました。すなわち、TerminalはPreferencesでDefaultのShellCommandをloginからtcshに変更しても、.loginを読み込んでいるようです。
所期の目的は達しており、些事ではありますが、気になりましたので質問しました。
(1)そういうもの。(2)terminalの問題。(3)私が何か勘違いしている。(4)私の環境に問題がありそう。(5)その他。
環境:
MacOSX10.2.4 (Build 6I32)
Terminal 1.3.1 (v82)
iTerm 0.6.3
#些事にしては長くてすみません。

投稿日 2003/03/02 15:44

返信: 7

2003/03/02 16:29 Community User への返信

tcshは使ってないので詳しくないです。
tcshやbash等のシェルは呼ばれ方によって挙動が違います。
詳しくはman tcshに書いてあります。
日本語なら
http://www.linux.or.jp/JM/html/tcsh/man1/tcsh.1.html
で、ログインシェルとして呼ばれた場合は、
最初に/etc/csh.cshrc と /etc/csh.login
次に‾/.tcshrc、‾/.tcshrcがなければ‾/.cshrc
その次に‾/.history (もしくは、シェル変数 histfile の値)
その次に ‾/.login
最後に、‾/.cshdirs (もしくは、 シェル変数 dirsfile の値)
(これはコンパイルの仕方で挙動がかわるらしい)
そして、ログインシェルではなく、普通に呼ばれたら、次の順に読むそうな。
/etc/csh.cshrc
‾/.tcshrc (または ‾/.cshrc)
terminalが.loginを読むのについては、
どこかのアップデートでそういうふうになったらしい
という話を聞いたことがあります。

2003/03/02 18:54 Community User への返信

デフォルトTerminalとiTermは違うみたいですね?
私はiMac(10.1.5) iBook(10.2.4)共にtcshを使っています
iBook(10.2.4)ではデフォルトTerminalとiTermのパスに
問題はありませんが
iMac(10.1.5)ではデフォルトTerminalとiTermのパスが
まったく違います
iMac(10.1.5)でiTermを使うとデフォルトで
'/sbin' '/usr/sbin'にパスが通っていません
前々から疑問でしたので便乗させてもらいます

2003/03/02 20:38 Community User への返信

.loginとか.tcshrcに下記を加えると読み込む順序などは判明するでしょう。
.loginに、echo This is .login
.tcshrcに、echo This is .tcshrc
ついでに.logoutに、echo This is .logout

2003/03/03 22:43 Community User への返信

???????????????
> .login??.tcshrc??????????????????????????
???????????.login????.tcshrc??????
?????Terminal?iTerm???????
A) iTerm?Preferences??DefaultShellCommand?"login -fp username"?????
Last login: date time on ttyp1
Welcome to Darwin!
This is .tcshrc
This is .login
?????????????????tcsh??????????
B) "/bin/tcsh"??????
This is .tcshrc
????"/usr/bin/login"???????A)??????????
"logout"????????????????
"exit"????????"logout"????
?????????tcsh??????????????????????????
???Terminal??Preferences?
C) Execute the default login shell using /usr/bin/login ???
iTerm?A)???????"login -fp username"????????
D) Execute this command ?????"/bin/tcsh"??????
This is .tcshrc
This is .login
????.login???????????????????
???????????????????man login???????????man tcsh???????^^;??????
???"/usr/bin/login"??????"login"????????iTerm?????????????????????
???"login"?????"logout"???This is .logout?????[Process completed]????
??????????????"login"???"logout"???tcsh??????This is .logout?????????[Process completed]????
????????????????
???????????????????tcsh/csh????????????????????????????????????
> terminal?.login??????????
> ????????????????????????
10.2???????????????????????????????????????????????Terminal????????????

2003/03/03 22:44 Community User への返信

皆さま、ありがとうございます。
> .loginとか.tcshrcに下記を加えると読み込む順序などは判明するでしょう。
試してみた結果、やはり.tcshrcが先で、.loginが後でした。
ところで、TerminalとiTermの違いですが。
A) iTermのPreferencesで、DefaultShellCommandを"login -fp username"とすると、
Last login: date time on ttyp1
Welcome to Darwin!
This is .tcshrc
This is .login
と出ますので、ログインシェルとしてtcshを呼び出しています。
B) "/bin/tcsh"とした場合、
This is .tcshrc
続けて、"/usr/bin/login"を実行すると、A)と同じ表示が出ます。
"logout"で、また、最初の状態に戻ります。
"exit"でプロセス終了("logout"不可)。
と言うことで、ただtcshを呼び出しているだけと解釈しました(間違ってます?)
一方、Terminalは、Preferencesで
C) Execute the default login shell using /usr/bin/login を選択
iTermのA)と同じなので、"login -fp username"を実行している。
D) Execute this command を選択し、"/bin/tcsh"にした場合。
This is .tcshrc
This is .login
と出て、.loginを読み込んでいることが確認出来ました。
最初の二行が出ない理由は分かりません(man loginを読んではみたが...man tcshは消化しきれん^^;)。しかし、
(1)"/usr/bin/login"だけではなく"login"も実行出来る。(iTermでは、ログインシェルじゃないよと言われる)
(2)"login"しなくても"logout"出来、This is .logoutを表示し、[Process completed]になる。
(3)(自分のアカウントで)"login"した後"logout"するとtcshには戻らず、This is .logoutを表示し、そのまま[Process completed]になる。
ので、ログインシェルっぽいです。
と言うわけで、新規ウィンドウを開く時にtcsh/cshを実行する場合は、必ずログインシェルとして呼び出しているように見えます。
> terminalが.loginを読むのについては、
> どこかのアップデートでそういうふうになったらしい
10.2で変わったんでしょうかねぇ。しかし、これだけのために遡るは面倒ですし、取り合えず、現バージョンTerminalの仕様ってことですかね。

2003/03/03 23:05 Community User への返信

> iMac(10.1.5)でiTermを使うとデフォルトで
> '/sbin' '/usr/sbin'にパスが通っていません
他は同じで、この二つだけ通ってないなら、iTermが後から合わせたか、Terminalの仕様が変わったために共通になったとか。
.loginと.tcshrcの中身を比べて、きくちさんの方法を試してみては。
jman tcshを読んでたら、「コンパイルの仕方によって、シェルは <略> ‾/.tcshrc (また は ‾/.cshrc) と ‾/.history の後ではなく前に ‾/.login を読み込む場合があります。」とありましたが、これは関係ないか...Terminalはシェルじゃなくて端末か。

2003/03/04 05:10 Community User への返信

> 一方、Terminalは、Preferencesで
> D) Execute this command を選択し、"/bin/tcsh"にした場合。
> 最初の二行が出ない理由は分かりません
最初の二行はloginが出します。(二行目は/etc/motdの表示。)
> > terminalが.loginを読むのについては、
> > どこかのアップデートでそういうふうになったらしい
> 10.2で変わったんでしょうかねぇ。
tcshについては、OS X独自の味付け(?)がしてあったものの、tcshの推進団体(グループ?)から互換上良くないとか指摘されて10.2のどこかで標準的なものに合わせたとかいう記事をどこかで読んだ気がします。でOS Xのユーザが混乱していると。
本件と関係ないかもしれませんが...。& 記憶もかなり曖昧ですが...。

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

Terminalにおける.tcshrcおよび.loginの読み込み

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。