$ PS1をローカルコンピューターとsshセッションで別々に設定する


9

ホームディレクトリをバージョン管理下に置いているので、基本的な構成をどのコンピューターでも簡単に利用できます。

ローカルコンピューターのbashコマンドプロンプトは、現在のgitリポジトリとその状態を含む複雑でカラフルなものです。しかし、リモートマシンにuser@host ~ $アクセスするときは、単純なコマンドプロンプトが必要sshです。

ローカルで実行.profileすると複雑$PS1になり、sshセッションで実行すると簡単になるように更新できるようにしたいと思います。

基本的に、私はで$AM_I_LOGGED_IN_VIA_SSHテストする変数のようなものを望みます.profile。それは可能ですか?

回答:


8

SSH経由でログインすると、追加の環境変数がいくつか設定されます。これらをテストとして使用して、PS1を.profileに設定できます。

if [ -n "$SSH_CLIENT" ]; then
    PS1="Via ssh: "
else
    PS1="Local: "
fi

7

あなたは(あなたの環境を確認する場合env | grep SSH)、次のようないくつかの候補を見つけることができます$SSH_CLIENT$SSH_CONNECTION$SSH_TTY。正確なリストはsshdバージョンによって異なります。


2

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が後で評価されるときに展開する必要があります。したがって、単一引用符です。



0

イグナシオの回答への追加として、物事を明確にPermitUSerEnvironmentするために、これが機能するためにはサーバー側でオプションを有効にする必要があります。サーバーがこのオプションを有効にしない場合、そのサーバーとのカラフルなsshセッションはありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.