로컬 컴퓨터와 ssh 세션에서 $ PS1을 다르게 설정


9

홈 디렉토리를 버전 제어 상태로 유지하여 모든 컴퓨터에서 기본 구성을 쉽게 사용할 수 있습니다.

로컬 컴퓨터의 bash 명령 프롬프트는 현재 git 저장소와 상태를 포함하는 복잡하고 화려한 것입니다. 그러나 원격 컴퓨터에 들어갈 user@host ~ $때 간단한 명령 프롬프트 가 필요합니다 ssh.

로컬에서 실행할 때 .profile복잡 $PS1하고 ssh세션 에서 실행할 때 간단 하게 설정할 수 있도록 업데이트 할 수 있기를 원합니다 .

기본적으로 $AM_I_LOGGED_IN_VIA_SSH내에서 테스트 할 변수 와 같은 것을 원합니다 .profile. 가능합니까?

답변:


8

SSH를 통해 로그인하면 몇 가지 추가 환경 변수가 설정됩니다. 이를 프로필로 사용하여 .profile에서 PS1을 설정할 수 있습니다.

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

$PPID쉘의 부모 프로세스가 원격 로그인 프로세스인지 아닌지를 확인하기 위해 다른 임의의 ps 트릭 (쉘이 설정되지 않은 경우). 그런 다음 parent-is-remote-thingie 인 경우 $ PS1을 전환하십시오. 그리고 ssh 서버가 정크이기 때문에 OpenSSH를 다운로드하고 geekosaur / Caleb의 제안을 사용하십시오. ;)

또는 "who am i"의 출력을 사용하고 마지막 필드 (예 :)를 잡고 $( who am i | awk '$0=$NF')호스트가 원격 호스트인지 로컬인지 확인하여 로컬 또는 원격으로 로그인했는지 여부를 결정할 수 있습니다.

또는 $(hostname)특정 호스트에서 쉘이 적절한 $ PS1을 사용하도록 출력을 켤 수 있습니다 .

아니면 정말 간절히 가자. bash, ksh93 또는 zsh와 같은 최신 쉘을 사용하는 경우 실행시 $ PS1이 재평가된다는 사실을 이용할 수 있습니다. 따라서 cwd가 저장소 내에 있고 외부에있는 경우 미친 자식 작업을 수행하기 위해 인라인 조건부 블록을 포함 할 수 있습니다. 예를 들어, 여기 [[ 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 저장소에있을 때 슈퍼 컬러 풀 한 git-stuff 만 얻고 다른 곳에서는 규칙적인 색상을 얻습니다. :) PS1 할당에 작은 따옴표를 사용해야합니다. PS1이 할당 될 때 변수가 확장되는 것을 원하지 않습니다. 나중에 $ PS1을 평가할 때 확장하기를 원합니다. 작은 따옴표.


1

PermitUserEnvironmentsshd에서 활성화되어 있으면 스크립트에서 값을 설정하고 정상적으로 설정하는 것을 감지 ~/.ssh/environment하는 데 사용할 수 있습니다 $PS1.


0

이그나시오 (Ignacio)의 답변에 추가하여, 명확하게하기 PermitUSerEnvironment위해서는 서버 측에서 옵션이 활성화되어 있어야합니다. 서버가이 옵션을 활성화하지 않으면 해당 서버와 다채로운 ssh 세션이 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.