8

私の故郷はシェルを書くことです。を使用する必要があります$PS2

しかし、次のようなコードを書くと:

char *ENV_ps2;
ENV_ps2 = getenv("PS2");

ENV_ps2を指していることがわかりました(null)

$PS2プログラムでを取得するにはどうすればよいですか?

4

3 に答える 3

8

およびシェル変数はエクスポートさPS1れないため、子プロセスからはアクセスできません。簡単なスクリプトでこれをテストできます。PS2

$ cat /tmp/pstest.sh
#!/bin/sh

echo PS1=$PS1
echo PS2=$PS2


$ /tmp/pstest.sh 
PS1=
PS2=
于 2012-05-08T15:40:15.167 に答える
2

bashでは$PS1$PS2はシェル変数であり、環境変数ではありません(少なくとも通常は)。これらは、bash自体の中でデフォルト値に設定されるか、ユーザーがインタラクティブに、またはやなどの起動スクリプトで明示的に設定し.profileます.bashrc

を介してアクセスすることはできずgetenv()、フォークされたサブプロセスに継承されません。これらは、シェル変数用のシェル独自のメカニズムによって内部的に管理されます。

独自のシェルを作成している場合は、おそらく同様のことを行うのが理にかなっています。

あなたはbashのソースコードを見るかもしれません。PS1それは大きくて複雑ですが、検索するPS2ことは有益かもしれません。(bashが使用するのとまったく同じメカニズムを使用する必要はありません。もっと単純なものが必要になる可能性があります。)

(入力export PS1$PS1て環境変数に変換することはできますが、そうすることはあまり意味がありません。)

于 2012-05-08T17:45:05.073 に答える
1

これらのenv変数はエクスポートされません。

移植性のないアプローチが必要な場合は、任意の環境変数を定義してエクスポートし、PS1/PS2を.bashrc/.bash_profileでその値に設定するだけです。

例えば:

# bashrc
MY_PS1="..........."
export $MY_PS1

...
...
...
PS1=$MY_PS1
于 2012-05-08T16:21:57.530 に答える