현재 "#"만 표시하는 sh 프롬프트 (bash 쉘이 아닌)에 현재 경로를 표시하고 싶습니다.
env PS1="$(whoami)@$(hostname):$(pwd)"
과
set PS1="$(whoami)@$(hostname):$(pwd)"
에서 /etc/profile
.
그러나 디렉토리가 변경되거나 사용자가 변경 될 때 이것은 새로 고쳐지지 않습니다. 이것을 역동적으로 만드는 방법을 제안하십시오.
현재 "#"만 표시하는 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)$ '
export PS1='$(whoami)@$(hostname):$(pwd)$'
나는에 변화의 저장 /etc/profile
. 감사합니다.
set
나를 위해 일했습니다 (그러나 나는 네이티브가 없었습니다 sh
). 그러나 export
설정에 맞게 변경하겠습니다 .
/etc/profile
(질문 참조) 또는 ~/.profile
?!
foo@localhost:/home/fools -la
사용할 수 ls -la
있습니다.
sh-4.2$ export PS1="\u@\h:\w>"
jenny@serenity:~>cd /usr/local
jenny@serenity:/usr/local>
\u@\h:\w>
명령 프롬프트로 나타납니다.
BusyBox v1.19.4 built-in shell (ash)
.
색상을 추가하여 프롬프트를 포주로 고려할 수도 있습니다. 예를 들어 :
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가 표시되면 프롬프트가 작동하는 것입니다. 리터럴 경로가 표시되면 프롬프트가 정적으로 설정되어 있기 때문입니다.
$()
은 별도의 프로그램을 실행합니다. 더 빨리 환경 등의 변수를 사용하는 것$LOGNAME
,$HOSTNAME
그리고$PWD
대신합니다.