質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

解決済

C言語でシェルスクリプトを呼び、シェルスクリプト内で設定した環境変数を、プロセスが終わっても覚えたままにさせたい

HoriemonHack
HoriemonHack

総合スコア48

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

2回答

0評価

2クリップ

226閲覧

投稿2022/05/19 11:14

編集2022/05/20 18:02

C言語でシェルスクリプトを呼び、シェルスクリプト内で環境変数を設定させようとしています。
しかし、以下のコードでは、1つ目のsystem()が終了すると、環境変数を忘れてしまいます。

2つ目のsystem("./app");で起動させるアプリにも環境変数を踏襲したい場合、どのような工夫が必要ですか?

main.cc

c

#include <iostream> #include <stdlib.h> #include <string.h> int main(){ system("source ./Initenv.sh"); system("./app"); return 0; }

Initenv.sh

sh

export HOGE=hanako

ただし、制約条件としては、Initenv.sh、appは変更できず、Cソースコードの中で環境変数の再設定は禁止されています。(環境変数の変更は、Initenv.shを真とすることになっており、ソースコードメンテナンスの都合上、Cに同じ環境変数の設定文を書いて二重メンテになるのを避ける)

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

Zuishin

2022/05/19 11:17 編集

環境変数は親プロセスから子プロセスへ引き継がれますが、逆はありません。 標準入出力など別の手段を使って親プロセスに渡し、親プロセスで改めて設定してください。 それが禁止されているのであれば、禁止を解除するよう働きかけるか、あきらめるより他ないでしょう。
otn

2022/05/19 12:14 編集

プロセスが終わると環境変数も消えることを知っていながら、何故systemを2回に分けて呼ぼうと思ったのか不思議です。
BeatStar

2022/05/20 09:02 編集

質問者さん、今回の処理を仕様と思ったきっかけや背景を書いた方がいいかもしれません。 たとえば「Initenv.shを社内の先輩から受け取って、『これで○○しろ』という指示がありました。しかし私は○○の処理をするとなると~という部分で10回ほど動かす必要があるため、効率化を図るためにapp.exeを作り、これを実行して人間の代わりに行おうと思っています。ですが…」みたいに背景を提示するとわかりやすく丁度いい回答が得られるかもしれません。 なんていうか、今の質問だとXY問題になっているような気がします。空を飛ぶことが目的なのに、『道具無しで空を飛ぶこと』に固執してこれ以外は認めない!!!と意固地になっているような妙な感じに取れます。失礼ですが。 背景を提示すれば、本来の目的を考えられるので愚直な方法は取れなくても問題解決はできるかもしれません。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。