(이 질문은 해결되었습니다. 담당자를 위해 이 질문을 편집하고 있습니다.)
프롬프트를 만드는 데 도움이 필요합니다. 명령을 내리는 방법을 알고 있지만 다음과 같은 작업을 하고 싶습니다.
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
에 제공하겠습니다. 이 방법에는 다양한 유형의 프롬프트가 있으며 다음과 같이 셸에서 메서드를 호출하여 이를 변경할 수 있습니다.
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