🔖
Mac zsh fzf で選択肢からコマンドを実行させる
参加しているプロジェクトで、DB に接続するのに環境ごとに異なる長いコマンドを毎回実行する必要があり、記憶力が無なのでコマンドを覚えられないから、コマンドをメモしておいてコピペで実行してたのですが、流石に面倒すぎたのでスクリプトを作ることにしました。
要件
- どこからでも実行できる
- 選択肢別にコマンドが実行される
npx create xxx
のようなイメージでターミナル上に選択肢を出して、選んだら選択肢ごとのコマンドが実行できるようにしたい
1. fzf を使って選択肢別にコマンドを実行するスクリプトを作成する
fzf のインストール
$ brew fzf
選択肢が選べる shell script の作成
./myScript/connectDB.sh
#!/bin/zsh
echo "Connect DB"
TARGETS=("dev" "prod")
selected=$(printf "%s\n" "${TARGETS[@]}" | fzf --prompt="Select target:" --height=4 --cycle)
if [[ -z "$selected" ]]; then
exit 1
fi
echo "Connect: $selected"
for choice in ${(f)selected}; do
case "$choice" in
"dev")
echo "\033[1;33;40m!!! Connect DEV DB !!!\033[0m"
# dev が選択された時に実行するコマンド
;;
"prod")
echo "\033[1;37;41m!!! Connect PROD DB !!!\033[0m"
# prod が選択された時に実行するコマンド
;;
esac
done
2. どこからでも実行できるようにする
~/.myScript
内にシェルスクリプトを作成したので、パスを設定する
.zshrc
export PATH="/Users/{USERNAME}/.myScript:$PATH"
コマンドのエイリアスを作成する
.zshrc
alias cdb='~/.myScript/connectDB.sh'
これでターミナルを再起動すると
cdb
コマンドで dev, prod どちらに接続するかの選択肢が表示され、選択した方の DB に繋げられるようになった
Discussion