커스텀 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\`"
일부`(백틱 문자)가 잘못된 위치에 있거나 이전 코드 블록에서 생략되었습니다.
답변
배시 매뉴얼을 인용하기 위해 PROMPT_COMMAND에서 대부분의 작업을 수행하는 것이 좋습니다. “설정하면 각 기본 프롬프트를 실행하기 전에 값이 명령으로 실행됩니다”
이 거대한 예를 참조하십시오 .
광산은 :-
PROMPT_COMMAND='history -a; history -n; printf "\e]1;${PWD}\a"'
터미널 창에 내 역사가 동기화되어 있습니다.
그렇다면 문제를 단순화하기 위해 bash 함수 안에 가능한 많은 것을 넣어야 할 것입니다.
BTW – 당신이 찾을 수있는 du -sh .
것보다 좀 더 유용하고 쉽게 /bin/ls -lah | /bin/grep -m 1 total
단지 파일 usage`를 얻을 수
답변
내 프롬프트 에는 다음과 같은 몇 가지 기능이 포함되어 있습니다
PS1='$(exit_code=$?; [[ $exit_code -eq 0 ]] || printf %s \[$BOLD_FORMAT\] \[$ERROR_FORMAT\] $exit_code \[$RESET_FORMAT\] " ")'
그게 당신을 위해 작동합니까?