ログイン時にスクリプトを実行

システム起動時またはTerminal起動時に
とあるシェルスクリプトを実行させたいのですが、
やり方がわかりません。
Terminalのスタートアップ・スクリプトというのがそれっぽい、と思い、
.commandで終わるファイルをむりやり指定してみたりしましたが、だめでした。
また、そのファイルを直接、ログイン項目に加えてみたりもしましたが、
実行されませんでした。
具体的にいうと、実行したいのは、
setiathomeを起動するだけの一行スクリプトです。
当方、どうにか三行程度のスクリプトを書けるようになった程度の初心者です。
コンパイルのコの字も知りません。
どうか、よろしくお願いいたします。
あらかじめ、ありがとうございます、と申し上げておきます。

投稿日 2001/06/30 09:04

返信: 10

2001/06/30 12:00 Community User への返信

Seiji.Suzuki です。
Terminal 起動時なら .login とか .tcshrc などのファイルを書くと幸せに
なれるかも知れません。.tcshrc は tcsh が起動する度に実行される
シェルスクリプトなので .login の方が良いかも知れませんね。もしかしたら
多少の条件分岐がないと思い通りのことが出来ないかも知れませんが、
件の書き込みだけでは私には良く分からないのでがんばって下さいね。

2001/06/30 14:16 Community User への返信

私も?と思って、試しに ".login" ファイルに
echo "hello"
と書いて試してみたんですが、新規ターミナルウインドウを開く度に "hello" と言われてしまいました。。。重複して立ち上げるのがよろしくないコマンドの場合は、この手法は使えそうもありませんね。
ログインと同時になら(その場合ログアウト時の後処理も欲しいです)ログイン項目に追加できるような簡単なラウンチャを作るか、もしくは起動と同時に立ち上げるのなら rc スクリプト中に埋め込むとかの手法があるのかも知れませんが。。。(すみません。私も情報求む)。

2001/06/30 15:20 Community User への返信

起動処理を考える上で大前提となるのは,rc の様な system から提供されている物は必要がなければ書換えないという事です。Swap 領域を別 volume に置く為に rc 書換えが流布している様ですが,これは /etc/fstab を使った場合問題が起りえる為仕方がないです(それでも私は /etc/fstab を使ってますが)
以上を踏まえて,どの段階で起動させたいかで何処で処理するかが別れます。

System 起動時
/System/Library/StartupItems 以下に処理を置きます。StartupParameters.plist を書かなければならない等,ちょっと面倒ですが,MacOS X では最も正当なやり方です。
Login 時
loginwindow の -LoginHook で処理します。これは /etc/ttys を書換える必要があります。また setiathome の様に動かしっ放しになる様な物なら,同じく -LogoutHook で後片付をする必要があります。
Login 後
System Preferences のログイン項目ですね。
Shell 起動時
sh 系では .profile,csh 系では .login に置きます。

2001/06/30 18:15 Community User への返信

皆さんの話を総合すれば、koguleさんの四分類の中の
最後の選択肢は消えるように思えます。
また、個人的には(つまり、まったくちんぷんかんぷんなので)、
その四つのうちの二番目の選択肢も消さざるをえません。
StartupParameters.plistの書き方はいずれ学びたいと思っていたので、
これを期に学んでもいいかもしれません。
ただ、ちょっと難しそうなので、
もっと簡単な代替手段が見つかれば、それで済まそうかとも思います。
その代替手段というのは、
シェルスクリプトをアプリケーション形式に変換して保存した上で
ログイン項目に加える、というものです。
スクリプトのままではなぜかログイン時に実行してもらえないのですが、
アプリ形式にすればごまかせるのではないか、と思う次第です。
以前、そういった変換をおこなってくれるユーティリティが
どこかで紹介されていたような気がする(定かではない)ので、
とりあえず探してみようかと思います。
じつをいえば、
自分が知らないだけで、とても簡単な手段があるんじゃないか、と思い、
知っている方にご教示いただこうと思ったのですが、
どうやら考えが甘かったようです。
皆さんの与えてくださったヒントを手がかりに、
どうにか自力で調べたり、探したりしてみようと思います。
ありがとうございました。

2001/06/30 18:45 Community User への返信

飯森さんがお作りになったsystemOSAX
http://www.bekkoame.ne.jp/‾iimori/sw/systemOSAX.html
を使うというのが正解の一つではないでしょうか?
これを使うと
system("open /Applications/setiathome")
というようなスクリプトが可能になります。これを
コンパイル済みスクリプトとして保存し、
システム環境設定→ログイン→追加
とやっておけば、希望されることは達成

2001/06/30 18:51 Community User への返信

じつをいえば、自分が知らないだけで、とても簡単な手段があるんじゃないか、と思い、知っている方にご教示いただこうと思ったのですが、どうやら考えが甘かったようです。


System の起動処理が,ある程度複雑になるのは仕方がないですね。

通常 OS を使っている時は,OS の色んな service が動いている事を前提に出来ますが,起動時にはその前提がありません。例えば setiathome であれば(使っていないのではっきりとは判りませんが)多分,nerwork service が動いている必要があると思いますが,その保証を起動処理自体がしてやらなければなりません。そんな風に特殊な環境下での処理になりますから,普通と同じ訳にはいきません。
# それでも init や cdev を書くよりは,随分簡単だと思いますけど。

また、個人的には(つまり、まったくちんぷんかんぷんなので)、その四つのうちの二番目の選択肢も消さざるをえません。


マア,-LoginHook が必要になるのは非常に特殊な場合だけですから,使う事はまずないでしょう。

その代替手段というのは、シェルスクリプトをアプリケーション形式に変換して保存した上でログイン項目に加える、というものです。


一人で使用しているのなら,これが案外正解かもしれませんね。

StartupItems に挑戦して具体的に判らない事が出来たら,また訊いて下さい :-)

2001/06/30 18:54 Community User への返信

parallaxさん、
>シェルスクリプトをアプリケーション形式に変換して保存した上
>でログイン項目に加える
のなら、飯森さんがお作りになった
systemOSAX
を使ってコンパイル済みスクリプト(Applescript)として保存する
のはどうでしょうか?
system("open /Applications")
のようなことが簡単に可能になります。

2001/06/30 20:54 Community User への返信

以下に詳細を記載します。
とうていスマートなやりかたとはいえませんが、
笑ってやってくださいまし。
1.以下のような二行のスクリプトを作成。
#!/bin/sh
/Applications/SAH/setiathome -verbose
上記のフォルダSAHの中(どこでもいい)に、
RunSeti.commandという名前(拡張子以外は何でもいい)で保存。
2.systemOSAXをダウンロード、所定の位置にインストール。
3.Script Editorを起動、以下のような一行を記述。
system("open /Applications/SAH/RunSeti.command")
OSX用アプレットとして任意の場所に保存。
4.アプレットをログイン項目に追加。
以上です。
なお、1.を省いて、3.のところで直接/Applications/SAH/setiathomeを
指定しようとも試みましたが、うまくいきませんでした。
末筆になりますが、koguleさん、Ryuさんのお二人にお礼を申し上げます。
koguleさんの最後のお言葉によって、引っ込みがつかなくなりました(笑)。
また、RyuさんがsystemOSAXを紹介してくださらなかったら、
今回の曲がりなりの成功はありえませんでした。
ありがとうございました。

2001/06/30 21:50 Community User への返信

おめでとうござます。でも,一つだけ。
# 何か小姑みたいだな。

#!/bin/sh
/Applications/SAH/setiathome -verbose


今後,起動処理等を扱っていく上で(扱うんですよね :-),上の様な処理は,

#! /bin/sh
if [ -f /Applications/SAH/setiathome ]; then
/Applications/SAH/setiathome -verbose
fi


とやって,file の存在を確かめた上で,実行した方がお行儀がいいです。限定された状況で無用な error を起さないという実際的な利点もあります。
# 詳細は,sh (1),test (1) を見て下さい。

2001/06/30 23:14 Community User への返信

BSD magazine 2001 No.8の「デーモン君のソース探検」という連載記事でtestコマンドについてやってますね。
なぜこの話題でtestコマンドが出てくるのか疑問に思った方は読んでみるといいと思います。
わたしもこの記事読んで“おぉ!”と思ったクチです(^^;)

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

ログイン時にスクリプトを実行

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