sshdが有用な変数を提供していない場合は、
ps -p $PPID
または他のランダムなpsトリック(シェルがを設定していない$PPID
場合)は、シェルの親プロセスがリモートログインプロセスであるかどうかを確認します。次に、parent-is-remote-thingieの場合、$ PS1を切り替えます。そしてOpenSSHをダウンロードしてgeekosaur / Calebの提案を使用してください。これは、sshサーバーがジャンクであるためです。;)
または、「who am i」の出力を使用して、最後のフィールド(つまり$( who am i | awk '$0=$NF')
)を取得し、ホストがリモートまたはローカルのどちらであるかを確認して、ローカルまたはリモートのどちらでログインしたかを判断できます。
または、の出力をオンにして、$(hostname)
特定のホストでシェルが適切な$ PS1を使用するようにできます。
または、実際に行きましょう。bash、ksh93、zshなどの最新のシェルを使用している場合は、実行時に$ PS1が再評価されるという事実を利用できます。したがって、cwdがリポジトリ内にあり、他の何かが外部にある場合は、インライン条件ブロックを組み込んで、クレイジーなgitを実行できます。たとえば、ここでは[[ conditional ]] && $( echo "whatever it should be if true) || $( echo "whatever should be the if-not-true prompt" )
基本的に、を使用して現在のディレクトリに応じてプロンプトを変更しています。
default prompt$ PS1='$(id -un) @ $(hostname)$( [[ $(pwd) = /tmp ]] && echo " [I am in /tmp]" || echo " /not/in/tmp")$ '
myname @ host /not/in/tmp$ cd /tmp
myname @ host [I am in /tmp]$ cd /etc
myname @ host /not/in/tmp$
確かに、$ PS1の定義はあなたのプロファイルで奇妙に見えますが、あなたが実際にgitリポジトリにいるときにのみsuper-colorful-git-stuffを取得し、他の場所では通常の色を持っています。:) PS1割り当ての前後に一重引用符を使用する必要があることに注意してください。PS1が割り当てられているときに変数を展開したくない場合。$ PS1が後で評価されるときに展開する必要があります。したがって、単一引用符です。