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


43

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

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

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

에서 /etc/profile.

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


1
각각 $()은 별도의 프로그램을 실행합니다. 더 빨리 환경 등의 변수를 사용하는 것 $LOGNAME, $HOSTNAME그리고 $PWD대신합니다.
grawity

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

내보내기 "PS1 ="$ (whoami) @ $ (hostname) : $ (pwd)> "를 사용하고 / etc / profile을 편집하고 마지막에이 줄을 추가하기
만하면

답변:


76

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

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

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


1
당신의 대답에 '수출'에 '설정'을 변경 한 후 마법처럼 일했다 export PS1='$(whoami)@$(hostname):$(pwd)$'나는에 변화의 저장 /etc/profile. 감사합니다.
Bleamer

@Bleamer : set나를 위해 일했습니다 (그러나 나는 네이티브가 없었습니다 sh). 그러나 export설정에 맞게 변경하겠습니다 .
mpy

2
이것을 영구적으로 만드는 방법이 있습니까? 현재는 로그인 할 때마다해야합니다. 감사합니다!
the.ufon September

3
이 줄을 /etc/profile(질문 참조) 또는 ~/.profile?!
mpy

+1, 마지막에는 구분자가 필요합니다. 있는 그대로 foo@localhost:/home/fools -la사용할 수 ls -la있습니다.
phresnel 2019 년

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

1
sh가 아닌 bash shell에서 작동하는 것이 두렵습니다.이 작업을 수행하면 \u@\h:\w>명령 프롬프트로 나타납니다.
Bleamer

1
다른 sh 버전이어야합니다. 첫 번째 줄에서 볼 수 있듯이 sh 4.2에서 나를 위해 일했습니다.
Jenny D

1
그럴 수도 있습니다. 이 쉘은 Busy Box에서 온 것입니다. 감사합니다. 그래도 도움을 주셔서 감사합니다.
Bleamer

@Bleamer,와 함께 작동합니다 BusyBox v1.19.4 built-in shell (ash).
CJM

@cjm 응답에 감사드립니다.하지만 이것에 대해 더 깊이 파고 들지 않을 것입니다.
Bleamer

5

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

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

여기서
\ u = username
\ h = hostname
\ W 현재 폴더의 이름 (전체 경로 아님)


\ W 매개 변수 +1
Dimitry K

3

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

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

1
이것이 내가 찾던 것입니다. 나는 모두가 인생에서 어떤 색깔을 좋아하기를 바랍니다 :)
Govind Kailas

적어도 난 그래 ;)
Arvid

1

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

set PS1="$(pwd)" 

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

set PS1="\$(pwd)" 

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

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

echo $PS1

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


1

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

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


감사! 위의 다른 옵션은 작동하지 않았습니다. 이건 나를 미치게했다. 제 정신을 구 해주셔서 감사합니다. 하아!
Lee_Str
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.