アカウント名:
パスワード:
ドットコマンドと直接スクリプトを実行した時の違い [hatena.ne.jp]
ただ、exportでPATHなどにいろいろと追加していると、一度logoutして再度loginした方がすっきりすることも多いですね。
ドットは、sourceコマンドの省略記法。既に source コマンドは使われてますね。
/etc/profile などの「sh がログイン時に自動で読み込むスクリプト」が書き換えられた時に、「ファイルを明示的に指定して source で読み込む」のが美しくない、という話かな、と理解したのですが…
> スクリプトの内部でexec bash --loginしたらそこでスクリプトの実行は止まってしまいます。
#!/bin/bashecho step1exec bash -l -c "echo step2"echo step3
こういうコードだと、step1 step2 は表示されますが、step3 は表示されません。
(環境変数に情報を保持しているとか、ループや条件判断の都合で)どう
なるほど。ドットとsourceが同じこと、ということ知らずにドットコマンド使っていました。よくよく調べてみると、bashでもない純粋のshではドットコマンドしか無いようですが、そういうシステムは今は少ないでしょう。
それはさておき、tuneo様のもともとやりたかったことは、再ログインしないで環境変数をログイン直後の状態に戻す、ということでしょうか? 私もそうしたいことはよくありますが、再ログインしてました。
こういうのはどうでしょうか?ログイン直後にprintenv > ~/envafterlogin.shのようなことして、環境を保存。
戻したいときは、source ~/envafterlogin.shとかする。
これだと、login直後にはなく、あとから追加された環境変数は削除されません。envafterlogin.shに無い変数をunsetする処理をしてから戻せばokかもしれません。ただし、実際に試していないので、問題が生じるかもしれません。
あたかも「ログアウトしてログインしなおした」ようにする、だけなら
# exec bash --login
すればいいのです。解説はmanページなどをどうぞ。
今回のお題は、それが「自動化すべき作業の一部」だった場合にどうするよ、というものでして。
>「自動化すべき作業の一部」
はログイン中のユーザが動作させる前提なのですか?そうではなくcrontabにぶち込んでやらせる形式とかJP1なんたら(日立のプロプラ、他社にもいろいろあるはず)にやらせる?
su - $USER "-c $command"でも現環境変数引き継ぐんだっけ(solaris の man(1M)ではそう書いてた)
すっきりと別ユーザのアカウント作るような改修は不許可なんだろな。
ログイン中のユーザが動作させるのが前提ですし、別アカウントは作らない方がいいですし、別途ソフトを入れたりもしませんし、そのためのお金も出ません。
スクリプトぶち込んでしばらく他の事してれば済むので大掛かりなことはする気はないですねというか、日記を書いた時点ですでに最低限の目的は達成した後なんですよ。
こうやって書いたら動いたけど、もうちょっといい書き方はないものか、と模索をしているだけです。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
アレゲは一日にしてならず -- アレゲ見習い
ドットコマンドでできそう (スコア:1)
ドットコマンドと直接スクリプトを実行した時の違い [hatena.ne.jp]
ただ、exportでPATHなどにいろいろと追加していると、一度logoutして再度loginした方がすっきりすることも多いですね。
Re: (スコア:1)
ドットは、sourceコマンドの省略記法。既に source コマンドは使われてますね。
/etc/profile などの「sh がログイン時に自動で読み込むスクリプト」が書き換えられた時に、「ファイルを明示的に指定して source で読み込む」のが美しくない、という話かな、と理解したのですが…
> スクリプトの内部でexec bash --loginしたら
そこでスクリプトの実行は止まってしまいます。
こういうコードだと、step1 step2 は表示されますが、step3 は表示されません。
(環境変数に情報を保持しているとか、ループや条件判断の都合で)どう
Re: (スコア:1)
なるほど。
ドットとsourceが同じこと、ということ知らずにドットコマンド使っていました。
よくよく調べてみると、bashでもない純粋のshではドットコマンドしか無いようですが、そういうシステムは今は少ないでしょう。
それはさておき、tuneo様のもともとやりたかったことは、
再ログインしないで環境変数をログイン直後の状態に戻す、
ということでしょうか? 私もそうしたいことはよくありますが、再ログインしてました。
こういうのはどうでしょうか?
ログイン直後に
printenv > ~/envafterlogin.sh
のようなことして、環境を保存。
戻したいときは、
source ~/envafterlogin.sh
とかする。
これだと、login直後にはなく、あとから追加された環境変数は削除されません。
envafterlogin.shに無い変数をunsetする処理をしてから戻せばokかもしれません。
ただし、実際に試していないので、問題が生じるかもしれません。
Re: (スコア:1)
あたかも「ログアウトしてログインしなおした」ようにする、だけなら
# exec bash --login
すればいいのです。解説はmanページなどをどうぞ。
今回のお題は、それが「自動化すべき作業の一部」だった場合にどうするよ、というものでして。
Re: (スコア:1)
>「自動化すべき作業の一部」
はログイン中のユーザが動作させる前提なのですか?
そうではなくcrontabにぶち込んでやらせる形式とか
JP1なんたら(日立のプロプラ、他社にもいろいろあるはず)にやらせる?
su - $USER "-c $command"
でも現環境変数引き継ぐんだっけ(solaris の man(1M)ではそう書いてた)
すっきりと別ユーザのアカウント作るような改修は不許可なんだろな。
Re:ドットコマンドでできそう (スコア:1)
ログイン中のユーザが動作させるのが前提ですし、別アカウントは作らない方がいいですし、別途ソフトを入れたりもしませんし、そのためのお金も出ません。
スクリプトぶち込んでしばらく他の事してれば済むので大掛かりなことはする気はないですねというか、日記を書いた時点ですでに最低限の目的は達成した後なんですよ。
こうやって書いたら動いたけど、もうちょっといい書き方はないものか、と模索をしているだけです。