(这个问题已经解决了,我正在为代表编辑这个问题)
我希望得到关于制作提示的帮助,我知道如何制作命令,但我想做一些类似的事情:
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
一些注意事项:
- 的一个重要组成部分REPL是个环形。您可以将代码包装在
while true; do ...; done
循环中。 - 如果您没有指定变量命令
read
,用户的输入存储在REPLY
变量中。 - 语句
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