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

  * SDKコンフィグ設定

```

    ・CONFIG_NSH_VARS＝Y
    ・NSH_DISABLE_ENV＝N
    
```

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

```

    sh /mnt/sd0/export.txt
    sh /mnt/sd0/sample1
    
```

  * export.txt内

```

    export DEF_SAMPLE1 0
    export DEF_SAMPLE2 "/mnt/sd0/"
    
```

  * sample1内

```

    sh /mnt/sd0/sample2 &
    
```

  * sample2内

```

    echo $DEF_SAMPLE1      ← 新SDKではNG。空白データ。旧SDKではOK
    echo ${DEF_SAMPLE2}   ← 新SDKではNG。空白データ。旧SDKではOK
    
```
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等)

```

    source /mnt/sd0/export.txt
    sh /mnt/sd0/sample1
    
```
CC BY-SA 4.0
2022-04-13T00:26:09.970
88309
2022-04-13T00:26:09.970
31378
88265
answer