こんにちわ。
ものすごくどうでもいいことかもしれませんが、教えてください。
以下の操作を行ないます。
1.~/.bashrc に環境変数の設定を行なう ( export aaa=123 など)
2."端末"を立ち上げて、環境変数を参照する
-> 成功する ( echo $aaa で 123 と表示される)
3.上記の環境変数を参照するだけのシェルスクリプトを作成する ( echo $aaa > ./a.txt みたいに )
4.コマンドラインから上記のシェルスクリプトを実行する
-> ./a.txt に 123 と記述されている
5.GUI 上から、3 のシェルスクリプトのファイルをクリックして実行する
-> ./a.txt に 123 と記述されていない (ファイル自体は更新されているのでパス違いなどではありません)
~/.bashrc による設定が"端末"を通さないと有効にならないのかとも思い、
/usr/local/apps/Terminal の中を参考にシェルを書き換えてもみたのですが変化はありませんでした。
GUI から直接クリックする方法で環境変数を有効に参照することは出来ないのでしょうか?
※特に困っているなどというのではなく、単純な興味からの質問です
環境変数の参照
Re: 環境変数の参照
シェルスクリプトファイルにはシェルスクリプトとなるお呪いがテキストファイルの1行目に5.GUI 上から、3 のシェルスクリプトのファイルをクリックして実行する
-> ./a.txt に 123 と記述されていない (ファイル自体は更新されているのでパス違いなどではありません)
なければなりません。
ディストリビュションによっては省略できるようですがPuppyでは出来ないようです。
コード: 全て選択
#!/bin/sh : スクリプトになるお呪い
aaa=123 : 環境変数の設定
echo $aaa > ./a.txt : 環境変数をテキストファイルに書き出し
# chmod +x ./a.txt
: a.txtに実行属性を付与する。
: a.txtファイル・ダブルクリックで動作させるために必要になります
: 実行属性を付与しないでスクリプトを実行するには
: sh a.txt とする。
「参考文献」
シェルスクリプトの作り方(1/8)
http://merry.whitesnow.jp/SEMICMD/SECTI ... on6_1.html
Re: 環境変数の参照
その後 Xは再起動されました?kukulu さんが書きました:1.~/.bashrc に環境変数の設定を行なう ( export aaa=123 など)
Re: 環境変数の参照
1〜5がX上でのことという前提で。
ある(仮想)端末の中で環境変数を設定したとして、
既に起動しているGUI(rox)からシェルスクリプトを実行した場合、
そのシェルスクリプトが参照している環境変数は前記の(仮想)端末の中のものではなく、
GUI(rox)が動いているシェル(X起動時)の環境変数なので、そのような結果になる。
と言うことではないか?
環境変数を設定した(仮想)端末からGUI(rox)を起動してその中で5を
実行すれば期待した結果が得られるはず。
ある(仮想)端末の中で環境変数を設定したとして、
既に起動しているGUI(rox)からシェルスクリプトを実行した場合、
そのシェルスクリプトが参照している環境変数は前記の(仮想)端末の中のものではなく、
GUI(rox)が動いているシェル(X起動時)の環境変数なので、そのような結果になる。
と言うことではないか?
環境変数を設定した(仮想)端末からGUI(rox)を起動してその中で5を
実行すれば期待した結果が得られるはず。
管理人見習い
NEC Express5800 S70/SR G6950 2.8GHz/1G
lenovo S10-3 AtomN450 1.66G/1G
暇人/貳馬力/2CV
NEC Express5800 S70/SR G6950 2.8GHz/1G
lenovo S10-3 AtomN450 1.66G/1G
暇人/貳馬力/2CV
Re: 環境変数の参照
nonki3476さん、シノバー さん、暇人さん、返信をありがとうございます。
対応が遅くなり申し訳ありません。
説明が不足していたようですので、追加の説明です。
・作成したシェルの冒頭部分には #!/bin/sh を挿入しています
・操作は Puppy を起動して X 上からテキストエディタや"端末"を操作して行なっていました
ということなので、nonki3476さんのご指摘は残念ながら当てはまらないものと思います。
ただ例示いただいたシェルについては、基本的に同一なのですが
aaa に値を設定する部分は .bashrc にて export 付きで行なっておりこの部分だけが異なっていました。
シノバーさんと暇人さんのご指摘は本質的には同一のものと考えますが、誤りはないでしょうか。
ご指摘をいただいた後、念のために X の再起動と、システムそのものの再起動を試しましたが
結果は変わりませんでした。
また、以下のことも試してみましたが、同様でした。
6. xterm を立ち上げるだけの b.sh を作成し、これを X 上からクリックしてコマンドラインを表示する
7. コマンドラインから aaa を参照する。あるいは 3 のシェルを実行する。
-> 成功する( 123 と表示される)
8. xterm を立ち上げて 3 のシェルを呼び出す b.sh を作成し、これを X 上からクリックして実行する
( xterm -e ./a.sh のような感じ )
-> 失敗する( 123 と表示されない)
またコンパイルのときのような基本的な勘違いをしていそうな気がしてきました。
ちょっと頭を冷やして考えてみます。
ありがとうございました。
対応が遅くなり申し訳ありません。
説明が不足していたようですので、追加の説明です。
・作成したシェルの冒頭部分には #!/bin/sh を挿入しています
・操作は Puppy を起動して X 上からテキストエディタや"端末"を操作して行なっていました
ということなので、nonki3476さんのご指摘は残念ながら当てはまらないものと思います。
ただ例示いただいたシェルについては、基本的に同一なのですが
aaa に値を設定する部分は .bashrc にて export 付きで行なっておりこの部分だけが異なっていました。
シノバーさんと暇人さんのご指摘は本質的には同一のものと考えますが、誤りはないでしょうか。
ご指摘をいただいた後、念のために X の再起動と、システムそのものの再起動を試しましたが
結果は変わりませんでした。
また、以下のことも試してみましたが、同様でした。
6. xterm を立ち上げるだけの b.sh を作成し、これを X 上からクリックしてコマンドラインを表示する
7. コマンドラインから aaa を参照する。あるいは 3 のシェルを実行する。
-> 成功する( 123 と表示される)
8. xterm を立ち上げて 3 のシェルを呼び出す b.sh を作成し、これを X 上からクリックして実行する
( xterm -e ./a.sh のような感じ )
-> 失敗する( 123 と表示されない)
またコンパイルのときのような基本的な勘違いをしていそうな気がしてきました。
ちょっと頭を冷やして考えてみます。
ありがとうございました。
Re: 環境変数の参照
どうもX起動のさいは /root/.bashrc は参照されないようですね。
Xとウィンドウマネージャーの起動時は /etc/profile と /etc/profile.dにあるものと /root/.xinitrc だけが使われるようです。
メニューからの起動を含めた全般に環境変数を設定したいときは /etc/profile.d 内にファイルを作り、そこに記述するのが正解みたいです。
参考(Waryの場合):/etc/profile.d/seamonkey など。
Xとウィンドウマネージャーの起動時は /etc/profile と /etc/profile.dにあるものと /root/.xinitrc だけが使われるようです。
メニューからの起動を含めた全般に環境変数を設定したいときは /etc/profile.d 内にファイルを作り、そこに記述するのが正解みたいです。
参考(Waryの場合):/etc/profile.d/seamonkey など。
Re: 環境変数の参照
シノバーさん、返信をありがとうございます。
なるほど。納得しました。
自分だけで探してたら一生行き着かなかったかも。。。w
やっぱり奥が深いですね。
なるほど。納得しました。
自分だけで探してたら一生行き着かなかったかも。。。w
やっぱり奥が深いですね。