
나는 사용자 정의 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 총계 | /bin/sed 's/total //')b\n`if [ \$? = 0 ]이면 echo [\e[32m]^_^ [\e[0m ] 작동함 - [\e[0m]; else echo [\e[31m]O_O[\e[0m]작동하지 않음 - ;
이는 이전 코드 샘플과 동일한 코드이지만 더 나은 가독성을 위해 블록으로 분리되고 주석 처리되었습니다.
#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
for (eg.) 를 실행한 후 더 이상 false가 될 수 없는 조건을 찾습니다"This folder has \$(/bin/ls -1 | /usr/bin/wc -l | /bin/sed 's: ::g') files"
. 최신 문이 깔끔하게 끝났다면 true이기 때문입니다.
출력을 동일한 위치에 유지하면서 어떻게 작동하게 할 수 있습니까? 첫 번째 명령이 실행되기 전에 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\`"
일부 `(백틱 문자)가 잘못된 위치에 있거나 이전 코드 블록에서 생략되었습니다.
답변1
Bash 매뉴얼을 인용하면 "설정된 경우 각 기본 프롬프트를 실행하기 전에 값이 명령으로 실행됩니다"라는 PROMPT_COMMAND에서 대부분의 작업을 수행하는 것이 더 나을 것입니다.
또한보십시오이 엄청난 예.
내 것은 :-
PROMPT_COMMAND='history -a; history -n; printf "\e]1;${PWD}\a"'
내 기록이 터미널 창에서 동기화된 상태로 유지됩니다.
그렇다면 문제를 단순화하기 위해 가능한 한 많은 bash 함수를 내부에 넣어야 할 것입니다.
그런데 - 파일 사용법을 얻는 것 du -sh .
보다 조금 더 유용하고 쉽다는 것을 알게 될 것입니다`/bin/ls -lah | /bin/grep -m 1 total
답변2
내 메시지다음과 같은 여러 기능이 포함되어 있습니다.
PS1='$(exit_code=$?; [[ $exit_code -eq 0 ]] || printf %s \[$BOLD_FORMAT\] \[$ERROR_FORMAT\] $exit_code \[$RESET_FORMAT\] " ")'
그게 당신에게 효과가 있나요?