리눅스의 sh (bash가 아닌)에서 명령 프롬프트에 현재 경로를 표시하는 방법? 표시하는 sh 프롬프트

현재 “#”만 표시하는 sh 프롬프트 (bash 쉘이 아닌)에 현재 경로를 표시하고 싶습니다.

env PS1="$(whoami)@$(hostname):$(pwd)"

set PS1="$(whoami)@$(hostname):$(pwd)"

에서 /etc/profile.

그러나 디렉토리가 변경되거나 사용자가 변경 될 때 이것은 새로 고쳐지지 않습니다. 이것을 역동적으로 만드는 방법을 제안하십시오.



답변

큰 따옴표로 묶은 명령 대체는 "즉시 확장됩니다. 그것은 당신이 원하는 것이 아닙니다. 작은 따옴표 '는 대체를 보존 $PS1하고 프롬프트를 표시 할 때만 확장됩니다. 따라서 이것은 작동해야합니다.

export PS1='$(whoami)@$(hostname):$(pwd)'

프롬프트 끝에 일반적인 달러 기호와 공백이 필요하면 끝 부분에 간단히 추가 $하십시오 (탈출 필요 없음).export PS1='$(whoami)@$(hostname):$(pwd)$ '


답변

sh-4.2$ export PS1="\u@\h:\w>"
jenny@serenity:~>cd /usr/local
jenny@serenity:/usr/local>


답변

이 명령은 저에게 효과적입니다.

export PS1="\u@\h: \W:$"

여기서
\ u = username

\ h = hostname

\ W 현재 폴더의 이름 (전체 경로 아님)


답변

색상을 추가하여 프롬프트를 포주로 고려할 수도 있습니다. 예를 들어 :

export PS1='\[\e[0;36m\]\u\[\e[0m\]@\[\e[0;33m\]\h\[\e[0m\]:\[\e[0;35m\]\w\[\e[0m\]\$ '


답변

하나의 대답은 큰 따옴표 대신 작은 따옴표를 사용하는 것이었지만, 정답은 아닙니다. 실제로하고 싶은 것은 프롬프트가 사용될 때까지 프롬프트 내부의 코드 평가를 연기하는 것입니다.

set PS1="$(pwd)"

set 명령으로 프롬프트를 작업 디렉토리로 설정합니다.

set PS1="\$(pwd)"

$ (pwd)를 확장하지 않습니다. 대신 PS1은 리터럴 값 $ (pwd)로 설정됩니다.

다음을 실행하여 테스트 / 이해하십시오.

echo $PS1

. 문자열 $ pwd가 표시되면 프롬프트가 작동하는 것입니다. 리터럴 경로가 표시되면 프롬프트가 정적으로 설정되어 있기 때문입니다.


답변

cpanel에서와 같이 설정하려면 아래 명령을 사용하십시오.

PS1=’$(whoami)@${HOSTNAME%%.*} [$ (pwd)] # ‘내보내기


답변