如何制作自定义提示?

如何制作自定义提示?

(这个问题已经解决了,我正在为代表编辑这个问题)

我希望得到关于制作提示的帮助,我知道如何制作命令,但我想做一些类似的事情:

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文件中的方法来调查和尝试,这个方法有许多不同类型的提示,你可以通过调用 shell 中的方法来更改它们,如下所示:

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文件中的任何内容时,您可以刷新 shell 读取的文件,如下所示:

source ~/.bashrc

相关内容