Linuxのスクリプトで、exportコマンドを利用しているのですが、
expoerコマンドの有効範囲についてわかる方がいたらお教えいただけますでしょうか。

有効範囲については、以下のURLを参照しました。
http://www.atmarkit.co.jp/ait/articles/0010/19/n …


例えば、
スクリプトAでは、
export HOGE_KEY='abcd'

スクリプトBでは、
export HOGE_KEY='efgh'

というスクリプトがあって、
両方Cronで実行するときに、
スクリプトAの処理中にスクリプトBが実行されても、
スクリプトの中で定義された変数であるから、スクリプトAの処理には
影響しない(スクリプトAではHOGE_KEY='abcd'のまま)との認識で良いのでしょうか。

よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

環境変数は、プロセス固有のデータで、異なるプロセス同士では全く独立で、プロセス内で変更しても他のプロセスには影響しません。



ということで、
>影響しない(スクリプトAではHOGE_KEY='abcd'のまま)との認識で良いのでしょうか。
は正しいです。

プロセス生成時には、環境変数の初期値としては、親プロセスの環境変数が引き継がれます(子プロセスで別のプログラムを起動する場合は変更して伝えることも可能)。
    • good
    • 0
この回答へのお礼

回答いただきありがとうございます。
>環境変数は、プロセス固有のデータで、異なるプロセス同士では全く独立で、プロセス内で変更しても他のプロセスには影響しません。

>ということで、
>>影響しない(スクリプトAではHOGE_KEY='abcd'のまま)との認識で良いのでしょうか。
>は正しいです。

認識が正しいとのことで、安心しました。

お礼日時:2014/09/25 09:10

それこそやってみれば一発でわかるのでは?



//以下a.sh
#!/bin/sh

echo "a";
export HOGE_KEY='abcd';
echo $HOGE_KEY;
./b.sh
echo $HOGE_KEY;
./c.sh
echo $HOGE_KEY;

//以下b.sh
#!/bin/sh

echo "b";
echo $HOGE_KEY;
export HOGE_KEY='efgh';
echo $HOGE_KEY;
./c.sh

//以下c.sh
#!/bin/sh

echo "c";
echo $HOGE_KEY;
export HOGE_KEY='ijkl';
echo $HOGE_KEY;

として、./a.shを実行
    • good
    • 0
この回答へのお礼

回答いただきありがとうございます。

今考えると、
スクリプトにsleep入れたり、時刻をログに出力させるようにして
実際にCronで動かせばわかるような内容でした。
失礼しました。

お礼日時:2014/09/25 09:10

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

Q「試験範囲」は英語でなんといいますか?

「試験範囲」は英語でなんといいますか?

どの辞書を調べてもthis test covers pages 30-42 のようにしかのっていません。

学校で試験範囲が書かれたプリントのタイトル部分は、一体どのような表現となるのが、英語圏で一般的なのでしょうか。お教えください。

Aベストアンサー

「範囲」とはちょっとニュアンスが違うのだけれど、試験に出る項目のリストには、"exam objectives" とか"Study guide"等と書かれています。
 
学期を通しての試験範囲や試験の日程が書かれたものは"exam schedule" とか "test schedule" と書かれています。
 
黒板の板書や口頭でテスト範囲を発表する場合は、"Test #3 will cover from chapter 5 to chapter 10."等です。 

Qlinuxのgrepコマンドに関して

linuxのgrepコマンドに関して

ファイルの中から、1や2という文字が単独で存在する行を検索したくて

grep 1 file名

とするのですが、そうすると11や23など文字が単独ではなく、含まれている行が出力されます。
含まれる、ではなく文字そのものを検索するにはどうしたらよいでしょうか?

Aベストアンサー

「1を含む。ただし1の前後に英数字が続くものを除く」だと、
grep -w 1
と簡単に書けます。

行に数字しかなくて、1 というただ一文字しかない行だけを抜き出したいなら、
grep -x 1 または grep -x '^1$' です。
です。

Q一般に「英語」というときの言葉の概念の範囲について

一般に「英語」というときの言葉の概念の範囲について

日常生活において、「英語」というとき
いわゆる「英語」の他に
慣用的にフランス語やドイツ語などの外国語(特にヨーロッパ圏の言語)のことも含めて
「英語」と呼び慣わす場合があるような気がするのですが。。。

自分の思い過ごしでしょうか?

Aベストアンサー

・・・というよりは、白人が外国語を話していたら、「英語」ときめつけてしまう
風潮がある、ということでしょう。本当はフランス語やドイツ語かもしらないのに。
あるいは、白人が道にまよっていて親切心がある人がつい「英語」で話しかけて
しまうかもしれません。本当は英語は片言で、スペイン語やイタリア語が
自分のことばかもしれないのに。

Qシェルスクリプトのコマンドの中に引数を使いたいのですが

シェルスクリプトのコマンドの中に引数を使いたいです。
例えば sed -i 's/*/$1/g' /*
のように文字置換コマンド中に引数で書き換えられるようにしたいのですがそのまま$1に書き換わってしまいます。渡し方がおかしいのでしょうか?宜しくお願いします。

Aベストアンサー

's/*/$1/g'を"s/*/$1/g"に変更してみては?
「'」は文字列の展開を抑制するので$1は$1のままだと思います。

Q「実行時エラー 9 インデックスが有効範囲にありません」を英語で連絡したい

VBで作ったソフトで良く出る、
実行時エラー 9 インデックスが有効範囲にありません
というエラーを、開発元に伝えたいのですが、

くだんのソフトがアメリカ製英語ソフトになっています。

アメリカの開発元へ、エラーを伝えてあげたいのですが、
MS日本で翻訳した「実行時エラー 9 インデックスが有効範囲にありません」
というエラーメッセージの、本国英語版メッセージが、どういう文面なのか
わからず困っています。

一応、Microsoft Technetも探してみたのですが、私の力量ではお手上げです。

どなたか英語版の原文エラーメッセージをご存知の方、
または、日本語エラーメッセージの原文対訳サイトをご存知の方、
などいらしてましたら、どうか助けてください。

Aベストアンサー

No.4です。
目的がVisual Basicで
>「実行時エラー 9 インデックスが有効範囲にありません」を英語で連絡したい
なら、どのバージョンでも
Run-time error 9 Subscript out of range
だと思います。

ランタイムがインストールされていなければ、Visual Basicは実行できないと思います。
そのプログラムのインストール時かそれ以前にインストールされていると思います。

Qシェルスクリプトでバックグラウンドで実行したコマンドの実行結果を取得するには

OS redhat linux
シェル bornシェル

シェルスクリプトでバックグラウンドで複数のコマンドを実行し、
すべてのコマンドが正常に終了したら次の処理へ進むみたいな事をしたいのですが、可能でしょうか?

直列にすればよいのですが、処理時間短縮の為、並列に処理したいのです。
宜しくお願いします。

Aベストアンサー

バックグラウンドで実行する全コマンドを実行した後、waitコマンドを実行すると良いと思います。
waitコマンド(引数なし)を実行すると、全てのバックグラウンドのコマンドの終了を待ちます。

Q英語とスペイン語は現在完了形の守備範囲が違いますか?

たった今話し相手が言ったことを聞き取れなかったとき、What did you say? と[過去形で]聞き返すのが、英語。
Que has dicho? と[現在完了形]で聞き返すのが、スペイン語。このように観察しました。もっとアカデミックな?言い方で説明すると、どんな風に言えますか?英語とスペイン語では現在完了形の守備範囲が違うのでしょうか?

Aベストアンサー

守備範囲は基本的には同じで、どちらも完了、結果、経験、継続を表すのに現在完了形を使います。
スペイン語の方が、過去形、現在完了形の区別を話し手の感情に依存しており、英語よりも用法がフレキシブルです。

例えばスペイン語では極端な話、5年前に起こった出来事を描写する文に現在完了を用いても間違いにはなりません。
分かり易い例を挙げると
Mi abuelo ha muerto hace cinco anos.
など。話し手が今でもおじいさんが亡くなった事を引きずっているんですね。
単純に事実を描写する場合は Mi abuelo murio hace cinco anos. です。

余談ですが、スペインのガリシア地方ではガリシア語に現在完了形が存在しないため
他の地域で完了形を用いる文にも過去形を用いる傾向が強いです。

それに比べると英語の完了形は時を表す副詞(句)によって過去形、現在完了形が明確に分かれています。
現在完了形は明確に過去を表す語句、Yesterdayとか、five years ago等と一緒には使えません。
現在を含む副詞(句)、today、this morning 等は現在完了形を使います。
但し、最近の過去の一時点を表す場合には過去形を用います。

ご質問の What did you say? が What have you said? とならないのは上記の「最近の過去の一時点を表す」場合にあたるのではないでしょうか。

守備範囲は基本的には同じで、どちらも完了、結果、経験、継続を表すのに現在完了形を使います。
スペイン語の方が、過去形、現在完了形の区別を話し手の感情に依存しており、英語よりも用法がフレキシブルです。

例えばスペイン語では極端な話、5年前に起こった出来事を描写する文に現在完了を用いても間違いにはなりません。
分かり易い例を挙げると
Mi abuelo ha muerto hace cinco anos.
など。話し手が今でもおじいさんが亡くなった事を引きずっているんですね。
単純に事実を描写する場合は Mi a...続きを読む

Qlinuxコマンドでファイル操作

linuxなどのターミナル上で、ファイル内部をコマンドで編集したいのですが
できますでしょうか。
例をあげますと、
hoge.shというスクリプトファイルに、
...
...
echo "/home/user001/hoge/"
...
のような内容のものがあった時に、

echo "/home/user001/hoge/"
の部分だけを、
echo "/home/user002/hoge/"
に変更したいのです。エディタで編集すれば良いのでしょうが、
量が多く、スクリプト可したいと考えています。
もし、コマンドラインからこのような簡単な変更ができるものがあれば
教えて頂けないでしょうか。

Aベストアンサー

>コマンドラインからこのような簡単な変更ができるものがあれば
sed コマンドというのがあります。

Q「できる範囲でお手伝いします」を英語で

こんにちは。

「私のできる範囲で助けます」
「私の知ってる範囲で助けます」
みたいな言い方は、英語ではどういいますか?
I do help you as I can. とかでいいんでしょうか?
よろしくお願いします。

Aベストアンサー

I'll help you as much as I can.

<参考>
http://tatoeba.org/eng/sentences/show/464753

Qlinuxのスクリプト

linuxのスクリプトを用いて計算の効率化を図ろうとしています。
そこで、ファイルの初期値を書き換えて計算していくfor文を作りたいと思っています。
ですが方法がよく分かりません。
教えてくださいませ。
よろしくお願い致します。

Aベストアンサー

> rm *.o
# こんなことしなくても、ソースが新しくなったら.oをコンパイルしなおし、.oが新しくなったら実行ファイルをリンクしなおすのがmake命令(とその設定のMakefile)なのですが、それはさておき

そのバッチファイル(linux等のOSでbash,tcshなどのシェルで動かすそれは「シェルスクリプト」と呼びますが)で、実行したい条件だけベタ書きするのが、単純明快な方法です.数回使う程度なら、これで十分

#条件1用
rm *.o
make || exit 1
実行ファイル名
#条件2用
rm *.o
make || exit 1
実行ファイル名
(以下略)

#makeに失敗したら終了するようにしました

それよりも問題は
条件の指定方法が書いてありませんが....ソースの中に直接書いて、条件変更毎にエディタで書き替えてるのでは?
変化する条件をなんらかの方法で外部から入力できるようにすると、一つの実行ファイルで済みます。シェルスクリプトもすっきりします
例えば、コマンドライン引数で条件を与えるようにすれば、次のようになります。

#実行ファイルのコンパイル
# rm *.o ## Makefileをきちんと設定すれば必要なし
make || exit 1

#条件1用
実行ファイル名 位置X1 位置Y1 速度1 ...
#条件2用
実行ファイル名 位置X2 位置Y2 速度2 ...
(以下略)

コマンドライン引数の受け取り方は別の話なので割愛します。argc argvで検索すればたくさん出てくるし、ここの質問にもたくさんでてます。

> rm *.o
# こんなことしなくても、ソースが新しくなったら.oをコンパイルしなおし、.oが新しくなったら実行ファイルをリンクしなおすのがmake命令(とその設定のMakefile)なのですが、それはさておき

そのバッチファイル(linux等のOSでbash,tcshなどのシェルで動かすそれは「シェルスクリプト」と呼びますが)で、実行したい条件だけベタ書きするのが、単純明快な方法です.数回使う程度なら、これで十分

#条件1用
rm *.o
make || exit 1
実行ファイル名
#条件2用
rm *.o
make || exit 1
実行ファイル...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング