カスタムプロンプトを作成するには? [閉鎖]

カスタムプロンプトを作成するには? [閉鎖]

(この質問は解決されました。担当者のためにこの質問を編集しています。)

プロンプトを作成するのに助けが必要です。コマンドを実行する方法を知っていますが、次のことをしたいと思います。

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

関連情報