みなさん、こんにちは。どんぶラッコです。
先週土曜日にこのようなコマンドを作成してみました。
こちらの解説動画にもあるように、指定したディレクトリ内のプロジェクトを検索・数字を選択するとエディタが開くようなものです
リポジトリはこちらです。(README.md
はまだ作っていませんが…)
私は普段javascript, php を記述しているので、bashを書いているときに詰まったポイントがありました。
本日はそのポイントをいくつかご紹介します!
引数で条件分岐
if [ $# -ge 1 ]; then
case "$1" in
"-d" | "--directory")
open_dev_directory
;;
"-w" | "where") echo `dirname $0`;;
esac
fi
ここでのポイントは $# -ge 1
です。この意味は、引数が1以上の場合です。 ge
は greater or equal
の略ですね。 >=
ということです。
例えば、この例で言うと op -d
のようにオプションをつけると open_dev_directory
関数が発火します。
文字の読み取り
read
コマンドで読み取ることができます。
今回の場合は、1文字毎に発火させたいので、最大文字数を指定しています。
書き方はこの通り。
read -n 1 -p "Project Name: ${input_name}${pick_candidate_projects}" -s input_char
-n
… nchars 入力文字数-p
… prompt プリフィックスで表示する文字列-s
… secure input 代入する変数
というオプションを使っています。
ディレクトリ一覧をfor文で取得
projects=()
for path in $dir_name/*; do
if [ -d $path ]; then # if diretory
project_name=$(basename $path)
if [ -z "$1" ] || [[ $project_name == "$1"* ]]; then #$1は引数, -z はnull判定
projects+=("$project_name")
fi
fi
done
今回はディレクトリの検索をしたいので、ディレクトリをfor文で取得する構文を書きました。
ポイントは for path in $dir_name/*;
です。 ディレクトリパスを指定した後にワイルドカード ( *
)を指定すると一覧を取得してくれるんですね。
他にもポイントがあったのでまた別の記事でご紹介します!