私は、実際のシェル名 (通常は bash) とそのパラメーターをパラメーターとして取る MyShell という cpp アプリケーションを作成しました。MyShell はそのラッパーとして機能します。
内部シェル、特に PS1 環境変数のコマンド プロンプトを変更する必要があります。
PS1環境変数を使用してコマンドラインで行う方法を知っています:
$ PS1="[myshell]"$PS1
[myshell]$
しかし、cpp アプリケーションからそれを行うのはそれほど簡単ではありません。
string newPS1 = "[myshell]" + string(getenv("PS1"));
setenv("PS1", newPS1.c_str());
if (execvp(shell, argv) < 0) {
cerr << "can not exec " << shell << ": " << strerror(errno) << endl;
exit(1);
}
afaik、bash が呼び出されると、/etc/.bashrc または /etc/profile からコマンドを実行します (ユーザーのオプションによって異なります)。これらのスクリプトは PS1 var も再定義します。だから私の
setenv("PS1", newPS1.c_str());
効果はありません。
なにか提案を?