パスワードを忘れた? アカウント作成
この議論は、tuneo (2938)によって テキとトモのテキ禁止として作成されたが、今となっては 新たにコメントを付けることはできません。

シェル力を高める:シェルスクリプト内部で環境変更」記事へのコメント

  • ドットコマンドと直接スクリプトを実行した時の違い [hatena.ne.jp]

    ただ、exportでPATHなどにいろいろと追加していると、一度logoutして再度loginした方がすっきりすることも多いですね。

    • ドットは、sourceコマンドの省略記法。既に source コマンドは使われてますね。

        /etc/profile などの「sh がログイン時に自動で読み込むスクリプト」が書き換えられた時に、「ファイルを明示的に指定して source で読み込む」のが美しくない、という話かな、と理解したのですが…

      > スクリプトの内部でexec bash --loginしたら
      そこでスクリプトの実行は止まってしまいます。

      #!/bin/bash
      echo step1
      exec 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)ではそう書いてた)

            すっきりと別ユーザのアカウント作るような改修は不許可なんだろな。

            親コメント
            • ログイン中のユーザが動作させるのが前提ですし、別アカウントは作らない方がいいですし、別途ソフトを入れたりもしませんし、そのためのお金も出ません。

              スクリプトぶち込んでしばらく他の事してれば済むので大掛かりなことはする気はないですねというか、日記を書いた時点ですでに最低限の目的は達成した後なんですよ。

              こうやって書いたら動いたけど、もうちょっといい書き方はないものか、と模索をしているだけです。

              親コメント

Stableって古いって意味だっけ? -- Debian初級

処理中...