私の故郷はシェルを書くことです。を使用する必要があります$PS2
。
しかし、次のようなコードを書くと:
char *ENV_ps2;
ENV_ps2 = getenv("PS2");
ENV_ps2
を指していることがわかりました(null)
。
$PS2
プログラムでを取得するにはどうすればよいですか?
私の故郷はシェルを書くことです。を使用する必要があります$PS2
。
しかし、次のようなコードを書くと:
char *ENV_ps2;
ENV_ps2 = getenv("PS2");
ENV_ps2
を指していることがわかりました(null)
。
$PS2
プログラムでを取得するにはどうすればよいですか?
およびシェル変数はエクスポートさPS1
れないため、子プロセスからはアクセスできません。簡単なスクリプトでこれをテストできます。PS2
$ cat /tmp/pstest.sh
#!/bin/sh
echo PS1=$PS1
echo PS2=$PS2
$ /tmp/pstest.sh
PS1=
PS2=
bashでは$PS1
、$PS2
はシェル変数であり、環境変数ではありません(少なくとも通常は)。これらは、bash自体の中でデフォルト値に設定されるか、ユーザーがインタラクティブに、またはやなどの起動スクリプトで明示的に設定し.profile
ます.bashrc
。
を介してアクセスすることはできずgetenv()
、フォークされたサブプロセスに継承されません。これらは、シェル変数用のシェル独自のメカニズムによって内部的に管理されます。
独自のシェルを作成している場合は、おそらく同様のことを行うのが理にかなっています。
あなたはbashのソースコードを見るかもしれません。PS1
それは大きくて複雑ですが、検索するPS2
ことは有益かもしれません。(bashが使用するのとまったく同じメカニズムを使用する必要はありません。もっと単純なものが必要になる可能性があります。)
(入力export PS1
し$PS1
て環境変数に変換することはできますが、そうすることはあまり意味がありません。)
これらのenv変数はエクスポートされません。
移植性のないアプローチが必要な場合は、任意の環境変数を定義してエクスポートし、PS1/PS2を.bashrc/.bash_profileでその値に設定するだけです。
例えば:
# bashrc
MY_PS1="..........."
export $MY_PS1
...
...
...
PS1=$MY_PS1