楽しみにbashを使用してCLIを作成したいと思います。私は次のような読み取りプロンプトが欲しい
CLI/[path]/:>
シンプル
read -p "CLI$PWD/:>"
ただし、このようなコマンドを実行するには、ディレクトリをcd
変更するための完全なインターフェイスを作成する必要があります。他の基本コマンドをすべて実行する方法を知っていますが、主な目的は、1つのコマンドでディレクトリを変更できることです。
たとえば、
CLI/[path]/:>cd [another path]
CLI/[another path]/:>
これまで私のスクリプトは次のようになりました。
#!/bin/bash
echo "Welcome to Easy Command-Line Interface! Type 'help' for help and
commands."
while true; do
read -p "ECLI$PWD/:>"
if [ $REPLY = "help" ]; then
echo "ECLI HELP:"
echo "help: Help Menu"
echo "cd: <dir> : Changes Directory"
echo "say: <text> : Prints <text>"
echo "exit: Exits ECLI"
echo "clear: Clears screen"
echo "
"
fi
if [ $REPLY = "exit" ]; then
echo "Exiting ECLI.."
sleep 1.5
clear
break
fi
if [ $REPLY = "clear" ]; then
clear
fi
done
ベストアンサー1
まず、引用符の使用を開始する必要があります。気づいたようです。
[ $ REPLY = "注文する"]
[: too many arguments
複数の単語を含むコマンドラインを入力すると、入力は失敗します(エラーメッセージと共に)。次に変更する必要があります。
もし[」$返信」="注文する"]
方法1:行を読み、最初の単語を抽出する
現在のスクリプトは完全な入力行を$REPLY
。cd /usr/local
を使用してこれを行うことができます。以下はパラメータ拡張の例です。cd /usr/local
cd
word1="${REPLY%% *}"
大きな打撃(1)またはPOSIX仕様。したがって、次のようにスクリプトを変更できます。
︙ if ["$ REPLY" = "消去"]; 明らか フィリピン諸島 word1="${返信%% *}" if["$word1"=cd] それから $返信 フィリピン諸島 ︙
方法2:最初の単語のみを読む
行全体を読みたい場合はほとんどありません。この例のように、シェルが行を単語に分割したい場合が多くあります。read
読み取る変数のリストをコマンドに提供することでこれを行うことができます。
︙ -p "ECLI$PWD/:>" 読み取りコマンドパラメータ ︙ もし["$cmd"= "消去"]; 明らか フィリピン諸島 if["$cmd"=cd] それから CD "$args" フィリピン諸島 ︙
方法3:各単語を個別に読む
上記の方法は、コンセプト証明のおもちゃに適しています。実際のアプリケーションでは、シェルが入力行を必要な数の単語に分割したい場合があります。次のオプションを使用して配列を読み取ることでこれを実行できます-a
。
︙ -p "ECLI$PWD/:>" 読み取り-アル ︙ もし["${arr[0]}"= "消去"]; 明らか フィリピン諸島 if [ "${arr[0]}" = cd ] それから cd "${arr[1]}" フィリピン諸島 ︙