

SpresenseSDKのコマンドシェルのイニシャル時に、以下のようにexportで変数定義しましたが、値が空白になってしまいます。  
・旧SDKバージョン（v2.2.0）では、うまく機能しておりました。  
・新SDKバージョン（v2.4.0）では、うまくいきません。変数の値が空白になってしまいます。  
例えばコマンドの使い方が変わったとか、Config設定で足りないものとかありますでしょうか？

  * SDKコンフィグ設定

[code]

    ・CONFIG_NSH_VARS＝Y
    ・NSH_DISABLE_ENV＝N
    
[/code]

  * イニシャル時(init.rc等)

[code]

    sh /mnt/sd0/export.txt
    sh /mnt/sd0/sample1
    
[/code]

  * export.txt内

[code]

    export DEF_SAMPLE1 0
    export DEF_SAMPLE2 "/mnt/sd0/"
    
[/code]

  * sample1内

[code]

    sh /mnt/sd0/sample2 &
    
[/code]

  * sample2内

[code]

    echo $DEF_SAMPLE1      ← 新SDKではNG。空白データ。旧SDKではOK
    echo ${DEF_SAMPLE2}   ← 新SDKではNG。空白データ。旧SDKではOK
    
[/code]


CC BY-SA 4.0
2022-04-11T08:16:27.763
88265
2022-04-13T00:26:09.970
2022-04-11T08:36:15.563
47303
47303
question
spresense
SpresenseSDKコマンドシェルのイニシャル時exportが機能しない


NuttX Environment Variables によると、環境変数はタスクグループごとに管理されているようです。  
<https://nuttx.apache.org/docs/latest/reference/user/09_env_vars.html>

  * task: タスク作成時、環境変数が子タスクに複製されるがそれぞれ独立したものになる
  * thread: スレッド間で環境変数は共有される

`sh` でプロセスを作成してそこで `export`
してもそのプロセスが終了すると同時に環境変数は消えます。旧SDKバージョンで動いていた理由は不明ですが、新SDKバージョンの動作が本来の仕様通りの振る舞いのようです（ドキュメントとコードを読む限り）。

`sh` の代りに `source` を使えば、この質問のケースは意図通りに動作するのではないかと思います。

  * イニシャル時(init.rc等)

[code]

    source /mnt/sd0/export.txt
    sh /mnt/sd0/sample1
    
[/code]


CC BY-SA 4.0
2022-04-13T00:26:09.970
88309
2022-04-13T00:26:09.970
31378
88265
answer