커스텀 PS1 변수를 만들었습니다. 다음은 완전히 작동하는 데 가장 가까운 것입니다.
PS1 = "\ n [\ e [1; 31m] \ u @ \ H [\ e [35m] \ @ [\ e [32m] PWD : \ w [\ e [1; 34m]이 폴더에는 \ $ ( / bin / ls -1 | / usr / bin / wc -l | / bin / sed 's : :: g') 파일 [\ e [1; 33m] 총 \ $ (/ bin / ls -lah | / bin / grep -m 1 total | / bin / sed 's / total //') b \ n`if [\ $? = 0]; 그런 다음 echo [\ e [32m] ^ _ ^ [\ e [0m ] 작동 함-[\ e [0m]; 그렇지 않으면 echo [\ e [31m] O_O [\ e [0m] 일하지 않았습니다-; fi` "
이것은 이전 코드 샘플과 동일한 코드이지만 더 나은 가독성을 위해 블록으로 분리되어 주석 처리되었습니다.
#User@Host [Red]
\n\[\e[1;31m\]\u@\H
#Hour [Purple]
\[\e[35m\] \@
#PWD [Green]
\[\e[32m\] PWD: \w
#Number of files in PWD [Blue]
\[\e[1;34m\]This folder has \$(/bin/ls -1 | /usr/bin/wc -l | /bin/sed 's: ::g') files
#Amount of space the PWD files take, also line break [Yellow]
\[\e[1;33m\]A total of \$(/bin/ls -lah | /bin/grep -m 1 total | /bin/sed 's/total //')b\n
#Malfunctioning condition, should smile if the instruction went right, or poker-face if not [green and red]
\`if [ \$? = 0 ]; then echo \[\e[32m\]^_^ \[\e[0m\]\[\e[0m\]Worked - \[\e[0m\]; else echo \[\e[31m\]O_O\[\e[0m\] Didn't worked - ; fi\`
문제를 설명하려고합니다.
if
는 (예를 들어)를 실행 한 후에 더 이상 거짓이 될 수없는 조건을 찾습니다."This folder has \$(/bin/ls -1 | /usr/bin/wc -l | /bin/sed 's: ::g') files"
최신 문장이 깔끔하게 끝났다면 사실이기 때문입니다.
출력을 같은 위치에 유지하면서 어떻게 작동시킬 수 있습니까? 첫 번째 명령이 실행되기 전에 if로 이동하면 정상적으로 작동합니다.
if
PS1 시작시 해당 조건 의 변수를 할당하려고 생각했습니다 . 그런 다음 if
이 위치에서 다른 것은 변하지 않는 대체 변수를 판단합니다. 그러나 불행히도 Bash에는 전혀 기술이 없습니다. 나는 이미 수천 번 정도 그렇게하지 못했습니다.
이 같은 (그러나 잘 쓰여진)
PS1="`if [ \$? = 0 ];then echo "prev_err=0"; else prev_err=0; fi\`
...[Some more code in between]...
`if [ \$prev_err = 0 ]
then echo "No error"
else echo "There was an error in the statement."
fi\`"
일부`(백틱 문자)가 잘못된 위치에 있거나 이전 코드 블록에서 생략되었습니다.
du -sh .
$ HOME의 시간 a 는 0m34.018s를 가져 왔고 4 du : ./Library / ... : Permission denied 'diagnostics가 있었습니다. 후자의 경우 타이밍, 실제 0m0.006s- 거의 눈에 띄지 않습니다.