回答編集履歴

2

補足

2023/03/24 18:10

投稿

otn
otn

スコア84505

test CHANGED
@@ -4,13 +4,14 @@
4
4
  シェル自体は環境変数SHELLが定義されていれば変更しません(下記※参照)。
5
5
 
6
6
  なので、`/etc/passwd`が`/bin/ksh`であれば、ログイン処理が行われれば、ログインプロセスが環境変数SHELLに`/bin/ksh`を設定するはずです。
7
- 質問にはシェルをどうやって起動したかが書かれていませんが、`docker exec -it CONTAINER /bin/ksh`等ではログイン処理をするわけではく単にkshコマンドを起動するだけでしょう。
7
+ 質問にはシェルをどうやって起動したかが書かれていませんが、`docker exec -it CONTAINER /bin/ksh`等ではログイン処理をするわけではく単にkshコマンドを起動するだけでしょう。
8
8
 
9
9
  環境変数SHELLが未定義の場合は、下記のように`/bin/sh`が設定されるみたいなので、やはり未設定のままでkshが起動されていると思われます。
10
10
  ```sh
11
11
  $ env -u SHELL ksh -c 'echo $SHELL'
12
12
  /bin/sh
13
13
  ```
14
+ 何故`/bin/ksh`でなく`/bin/sh`が設定されるのかは`man ksh`からは不明です。`/bin/sh`上位互換として作られたからですかね。
14
15
 
15
16
  # 参考
16
17
  ※ もちろん、変更しないと言っても、`bashrc` `zshrc` `kshrc`等で`SHELL`を変更するように書かれていればそれが実行されて上書きします。手元の`/etc/bashrc`には`SHELL=/bin/bash`と書かれていますので、対話型でbashを起動すると上書きされます。

1

微修正

2023/03/24 18:02

投稿

otn
otn

スコア84505

test CHANGED
@@ -12,10 +12,11 @@
12
12
  /bin/sh
13
13
  ```
14
14
 
15
+ # 参考
15
- ※ もちろん、`bashrc` `zshrc` `kshrc`等で`SHELL`を変更するように書かれていればそれが実行されて上書きします。手元の`/etc/bashrc`には`SHELL=/bin/bash`と書かれていますので、対話型でbashを起動すると上書きされます。
16
+ ※ もちろん、変更しないと言っても、`bashrc` `zshrc` `kshrc`等で`SHELL`を変更するように書かれていればそれが実行されて上書きします。手元の`/etc/bashrc`には`SHELL=/bin/bash`と書かれていますので、対話型でbashを起動すると上書きされます。
16
17
  ```sh
17
18
  $ SHELL=/bin/ksh bash -c 'echo $SHELL'
18
- /bin/ksh # bash -c では /etc/bashrcは読まないので不変
19
+ /bin/ksh # bash -c では /etc/bashrcは読まないので不変
19
20
  $ SHELL=/bin/ksh bash -ic 'echo $SHELL'
20
21
  /bin/bash # bash -ic だと /etc/bashrcを読むので上書き
21
22
  ```