docker-composeコマンドが長い
開発中、docker-composeでコンテナの立ち上げとか終了とかをやっているとこんな感じになることが多い。
# 終了して削除したい
docker-compose stop hoge && docker-compose rm -f hoge
# 終了して削除してビルドしてupしたい
docker-compose stop hoge && docker-compose rm -f hoge && docker-compose build hoge && docker-compose up -d hoge
# 終了して削除してビルドしてupしてログを見たい
docker-compose stop hoge && docker-compose rm -f hoge && docker-compose build hoge && docker-compose up -d hoge && docker-compose logs -f hoge
毎回毎回docker-compose
とコンテナ名を打ち直すのは面倒だ。
そこで、aliasで短く打てるように~/.zshrc
へこのように書いた。(bashの場合はbash_profile
)
alias dcps="docker-compose ps"
alias dcbd="docker-compose build"
alias dcup="docker-compose up -d"
alias dcst="docker-compose stop"
alias dcrm="docker-compose rm -f"
alias dclog="docker-compose logs -f"
function dcstrm() {
dcst $1 && dcrm $1
}
function dcrl() {
dcstrm $1 && dcbd $1 && dcup $1
}
function dcrlog() {
dcrl $1 && dclog $1
}
大分短かくなった
# 終了して削除したい
dcstrm hoge
# 終了して削除してビルドしてupしたい
dcrl hoge
# 終了して削除してビルドしてupしてログを見たい
dcrlog hoge
なんて便利なんだろう。もっと早くやっておけばよかった……。
aliasはシェルスクリプトとは書き方が違う
最初、シェルスクリプトと同じつもりで次のようなaliasを書いたところ、dcstrm
から先がうまく動作しなかった。
$1
がうまくパラメータとして渡らず、全てのコンテナが操作の対象となってしまうのだ。
alias dcps="docker-compose ps"
alias dcbd="docker-compose build $1"
alias dcup="docker-compose up -d $1"
alias dcst="docker-compose stop $1"
alias dcrm="docker-compose rm -f $1"
alias dclog="docker-compose logs -f $1"
# ここから先がうまく動かない!
alias dcstrm="dcst $1 && dcrm $1"
alias dcrl="dcstrm $1 && dcdb $1 && dcup &1"
alias dcrlog="dcrl $1 && dclog $1"
ググってみると、aliasはシェルスクリプトと一緒ではなく、$#
のようなものは使えないことが分かった。
引数を使いたいときはfunctionを定義するとのこと。
To quote the bash man page:
There is no mechanism for using arguments in the replacement text. If arguments are needed, a shell function should be used (see FUNCTIONS below).
So it looks like you've answered your own question -- use a function instead of an alias
How to pass command line arguments to a shell alias? - Stack Overflow