Bashスクリプトで端末を起動したときにプロンプ​​トを変更する(ただし、すべての端末には影響しません)

Bashスクリプトで端末を起動したときにプロンプ​​トを変更する(ただし、すべての端末には影響しません)

2つの端末がインストールされていgnome-terminalますxfce4-terminal

>xfce端末は起動時に単純なプロンプトのみを表示したいと思います。プロンプトはgnome-terminal同じままでなければなりません(したがってbashrc修正がないと仮定します)。

xfce-terminalいくつかのパラメータがあるスクリプトや他の端末から始めてもかまいません。

私は試した:

xfce4-terminal -x export PS1='> '

しかし、これはエラーを引き起こし、明らかに不可能です。

少しハッキングしても、どんな解決策でも大歓迎です。

答え1

名前を変更し.bashrc、親プロセスの名前をテストします。

parent_process=$(ps -o comm= -p $PPID)
parent_process=${parent_process##*/}
case "$parent_process" in
  xfce4-terminal) PS1='> ';;
esac

別の方法は、環境変数を設定することです。 runPROMPT_THEME=plain xfce4-terminalPROMPT_THEMEtest.bashrcそこから変数を設定解除するか、少なくともエクスポートを取り消すことができます。それ以外の場合は、最初の端末で開始された端末にも設定されます。

case $PROMPT_THEME in
  plain) PS1='> ';;
esac
export -n PROMPT_THEME

の場合、xfce4-terminal最初のインスタンスを除いては機能しません。後続のインスタンスは実行中のインスタンスに新しいウィンドウを開くように通知するため、新しいインスタンスは実行中のインスタンスから環境を継承します。 (はい!)ユーティリティを使用して、端末で実行されるコマンドを使用して環境変数を設定できますenv

xfce4-terminal -x env PROMPT_THEME=plain bash

答え2

どの端末が開いているかを確認してください。

 case "$TERM" in
    gnome-terminal ) PS1="[\h] \W > \[\033]0;[\u@\h] \w\007\]"
        ;;
    xfce4-terminal ) PS1="> "
        ;;
    esac

答え3

~/.bashrc設定されていない場合は、PROMPT_COMMAND次から始めることができますxfce4-terminal

PROMPT_COMMAND='PS1="> "; unset PROMPT_COMMAND' xfce4-terminal

答え4

1つの方法は、現在BASH PID($ $を介して取得)から始めて、PPIDを取得するなど、bashシェルの祖先となる端末を見つけるまで続けることです。この情報に基づいてPSを設定できます。

通常、シェルの親は端末です。

私のシステムの概念証明(Debian 7)。

$ PARENT_PID=$(ps --pid=$$ -o ppid --no-headers)
$ ps --pid $PARENT_PID -o command --no-headers
gnome-terminal -x /bin/sh -c cd '/home/XXXX/Desktop' && exec $SHELL

したがって、私のシステムでは、シェルの親を見ると、そのシェルがgnome端末で実行されていることがわかります。

一行にまとめると次のようになります。

$ ps --pid $(ps --pid=$$ -o ppid --no-headers) -o command --no-headers
gnome-terminal -x /bin/sh -c cd '/home/XXXX/Desktop' && exec $SHELL

私はこの行を.bashrc

MY_TERMINAL=$(ps --pid $(ps --pid=$$ -o ppid --no-headers) -o command --no-headers | cut -f 1 -d " ")

MY_TERMINAL含まれていることを確認しましたgnome-terminal

だから大丈夫でしょう。

関連情報