맞춤 프롬프트를 만드는 방법은 무엇입니까? [폐쇄]

맞춤 프롬프트를 만드는 방법은 무엇입니까? [폐쇄]

(이 질문은 해결되었습니다. 담당자를 위해 이 질문을 편집하고 있습니다.)

프롬프트를 만드는 데 도움이 필요합니다. 명령을 내리는 방법을 알고 있지만 다음과 같은 작업을 하고 싶습니다.

V-PROMPT:>

나도 할 수 있다는 걸 알아

read -p 'V-PROMPT:>'

하지만 다음과 같은 명령을 넣을 수 있기를 원합니다.

V-PROMPT:>help

V-PROMPT HELP v1.0
help - displays help page
[thing 2]
[thing 3]

기타 등등

이것은 지금까지 내 스크립트입니다.

#!/bin/bash

read -p 'V-PROMPT->'

if [[ "$1" == "help" ]]; then
echo "V-PROMPT HELP v0.1"

EOF

if [[ "$1" == "ver" ]]; then
echo "V-PROMPT INDEV v0.1"

fi;

이것을 실행하면 다음과 같은 결과를 얻습니다.

/home/{User@penguin}/bin/vprompt: 14행: 구문 오류: 예기치 않은 파일 끝

답변1

몇 가지 참고사항:

  1. 중요한 부분REPL~이다반지. 코드를 while true; do ...; done루프로 래핑할 수 있습니다.
  2. 변수를 지정하지 않으면read명령, 사용자의 입력은 REPLY변수에 저장됩니다.
  3. case긴 if-elif-elif... 문 대신 문을 사용할 수 있습니다.
#!/bin/bash
while true; do
    read -p 'V-PROMPT-> '
    case "$REPLY" in
        help)
            echo "V-PROMPT HELP v0.1"
            ;;
        ver)
            echo "V-PROMPT INDEV v0.1"
            ;;
        quit)
            echo bye
            break
            ;;
    esac
done

답변2

다음과 같이 프롬프트를 원하는 대로 변경할 수 있습니다.

PS1='V-PROMPT:>'

영구적으로 만들려면 파일 끝에 이전 줄을 추가하세요 .bashrc.

조사하고 시도해 볼 수 있는 방법을 내 파일 .bashrc에 제공하겠습니다. 이 방법에는 다양한 유형의 프롬프트가 있으며 다음과 같이 셸에서 메서드를 호출하여 이를 변경할 수 있습니다.

chmpt 7

이 코드는 파일에 저장됩니다. 필요하지 않으면 /home/USER/.bashrc삭제해야 합니다. 다음은 호출 시 귀여운 설명을 제공하는 프로그램입니다.taocl

chmpt()
{
    echo "Successfuly called"
    if [ "$1" -eq 1 ]
    then
        PS1='[\t][\u] \[\033[01;34m\]\w\[\033[00m\] [\[\033[01;32m\]\h\[\033[00m\]]\n~↓↓$↓↓ '
        taocl
    elif [ "$1" -eq 2 ]
    then
        PS1='[\t][\u] \[\033[01;34m\]\w\[\033[00m\] ~↓↓$↓↓ '
        taocl
    elif [ "$1" -eq 3 ]
    then
        PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
        printf "%s\n" "Have a nice day!!!!!?"
        taocl
    elif [ "$1" -eq 7 ]
    then
        PS1="\[\033]0;[\h] \w\007\]\[\033[1m\]\[\033[37m\](\[\033[m\]\[\033[35m\]\u@\[\033[m\]\[\033[32m\]\h\[\033[1m\]\[\033[37m\]\[\033[1m\])\[\033[m\]-\[\033[1m\](\[\033[m\]\t\[\033[37m\]\[\033[1m\])\[\033[m\]-\[\033[1m\](\[\033[m\]\[\033[36m\]\w\[\033[1m\]\[\033[37m\])\[\033[35m\]${git_branch}\[\033[m\]-(`ls | wc -w`)\n$"
        printf "%s\n" "Have a nice day!!!............----->"
        taocl
    elif [ "$1" -eq 4 ]
    then
        PS1="\`if [ \$? = 0 ]; then echo \[\e[33m\]^_^\[\e[0m\]; else echo \[\e[31m\]O_O\[\e[0m\]; fi\`[\u@\h:\w]\\$ "
        printf "%s\n" "Have a nice day!"
        taocl
    elif [ "$1" -eq 5 ]
    then
        #PROMPT_COMMAND='
        PS1="\[\033[0;33m\][\!]\`if [[ \$? = "0" ]]; then echo "\\[\\033[32m\\]"; else echo "\\[\\033[31m\\]"; fi\`[\u.\h: \`if [[ `pwd|wc -c|tr -d " "` > 18 ]]; then echo "\\W"; else echo "\\w"; fi\`]\$\[\033[0m\] "; echo -ne "\033]0;`hostname -s`:`pwd`\007"
#'
        taocl
    elif [ "$1" -eq 6 ]
    then
        PS1="\n\[\033[35m\]\$(/bin/date)\n\[\033[32m\]\w\n\[\033[1;31m\]\u@\h: \[\033[1;34m\]\$(/usr/bin/tty | /bin/sed -e 's:/dev/::'): \[\033[1;36m\]\$(/bin/ls -1 | /usr/bin/wc -l | /bin/sed 's: ::g') files \[\033[1;33m\]\$(/bin/ls -lah | /bin/grep -m 1 total | /bin/sed 's/total //')b\[\033[0m\] -> \[\033[0m\]"
        taocl
    elif [ "$1" -eq 0 ]
    then
        PS1="\[\033[35m\]\t\[\033[m\]-\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ "
    elif [ "$1" -eq 8 ]
    then
        PS1="\n\[\e[30;1m\]\[\016\]l\[\017\](\[\e[34;1m\]\u@\h\[\e[30;1m\])-(\[\e[34;1m\]\j\[\e[30;1m\])-(\[\e[34;1m\]\@ \d\[\e[30;1m\])->\[\e[30;1m\]\n\[\016\]m\[\017\]-(\[\[\e[32;1m\]\w\[\e[30;1m\])-(\[\e[32;1m\]\$(/bin/ls -1 | /usr/bin/wc -l | /bin/sed 's: ::g') files, \$(/bin/ls -lah | /bin/grep -m 1 total | /bin/sed 's/total //')b\[\e[30;1m\])--> \[\e[0m\]"
        taocl
    elif [ "$1" -eq 9 ]
    then
        PS1="\n\[\e[1;30m\][$$:$PPID - \j:\!\[\e[1;30m\]]\[\e[0;36m\] \T \[\e[1;30m\][\[\e[1;34m\]\u@\H\[\e[1;30m\]:\[\e[0;37m\]${SSH_TTY:-o} \[\e[0;32m\]+${SHLVL}\[\e[1;30m\]] \[\e[1;37m\]\w\[\e[0;37m\] \n\$ "
        taocl
    elif [ "$1" -eq 10 ]
    then
        #PROMPT_COMMAND='echo -en "\033[m\033[38;5;2m"$(( `sed -n "s/MemFree:[\t ]\+\([0-9]\+\) kB/\1/p" /proc/meminfo`/1024))"\033[38;5;22m/"$((`sed -n "s/MemTotal:[\t ]\+\([0-9]\+\) kB/\1/Ip" /proc/meminfo`/1024 ))MB"\t\033[m\033[38;5;55m$(< /proc/loadavg)\033[m"' \
        PS1='\[\e[m\n\e[1;30m\][$$:$PPID \j:\!\[\e[1;30m\]]\[\e[0;36m\] \T \d \[\e[1;30m\][\[\e[1;34m\]\u@\H\[\e[1;30m\]:\[\e[0;37m\]${SSH_TTY} \[\e[0;32m\]+${SHLVL}\[\e[1;30m\]] \[\e[1;37m\]\w\[\e[0;37m\] \n($SHLVL:\!)\$ '
        taocl
    elif [ "$1" -eq 11 ]
    then
        #PROMPT_COMMAND='export H1="`history 1|sed -e "s/^[\ 0-9]*//; s/[\d0\d31\d34\d39\d96\d127]*//g; s/\(.\{1,50\}\).*$/\1/g"`";history -a;echo -e "sgr0\ncnorm\nrmso"|tput -S'
        PS1='\n\e[1;30m[\j:\!\e[1;30m]\e[0;36m \T \d \e[1;30m[\e[1;34m\u@\H\e[1;30m:\e[0;37m`tty 2>/dev/null` \e[0;32m+${SHLVL}\e[1;30m] \e[1;37m\w\e[0;37m\[\033]0;[ ${H1}... ] \w - \u@\H +$SHLVL @`tty 2>/dev/null` - [ `uptime` ]\007\]\n\[\]\$ '
        taocl
    elif [ "$1" -eq 12 ]
    then
        PS1='\n\e[1;30m[\j:\!\e[1;30m]\e[0;36m \T \d \e[1;30m[\e[1;34m\u@\H\e[1;30m:\e[0;37m`tty 2>/dev/null` \e[0;32m+${SHLVL}\e[1;30m] \e[1;37m\w\e[0;37m\[\033]0;[ ${H1}... ] \w - \u@\H +$SHLVL @`tty 2>/dev/null` - [ `uptime` ]\007\]\n\[\]\$ '
        taocl
    elif [ "$1" -eq 13 ]
    then
        PS1="\n[$?]\e[1;37m[\e[0;32m\u\e[0;35m@\e[0;32m\h\e[1;37m]\e[1;37m[\e[0;31m\w\e[1;37m]($SHLVL:\!)\n\[\033[0m\]\$ "
        taocl
    else
        printf "%s\n" "Bad input........->...#Try again↓"
    fi
}

.bashrc파일의 내용을 변경하면 다음과 같이 셸에서 읽은 파일을 새로 고칠 수 있습니다.

source ~/.bashrc

관련 정보