LoginSignup
4
2

More than 3 years have passed since last update.

WordPressの公式にあるdocker-entrypoint.shが読めなかった->なんとか読めるようになるまで

Last updated at Posted at 2020-05-14

Shell ゼンゼン ヨメナイ

Docker-composeがうまくいかないときに、「とりあえずdocker-entrypoint.shでも読んでみるかー」と思ったけど、全然読めなかった。なんやこれ。

docker-entrypoint.sh
#!/bin/sh
set -euo pipefail

# first arg is `-f` or `--some-option`
if [ "${1#-}" != "$1" ]; then
    set -- wp "$@"
fi

# if our command is a valid wp-cli subcommand, let's invoke it through wp-cli instead
# (this allows for "docker run wordpress:cli help", etc)
if wp --path=/dev/null help "$1" > /dev/null 2>&1; then
    set -- wp "$@"
fi

exec "$@"

特にわからなかったところをメモで残す。

set -euo pipefail

setでshellのオプションを色々設定しているらしい
[参考]https://qiita.com/m-yamashita/items/889c116b92dc0bf4ea7d

eオプションはエラーが発生したら中断
uオプションは未定義の変数をエラーにするもの
oオプションはpipefailとセットで使っていて、パイプの左側のコマンドが死んだときに止まってくれるというもの
https://qiita.com/progrhyme/items/6e522d83de3c94aadec9

if [ "${1#-}" != "$1" ]; then
    set -- wp "$@"
fi

これが全然わからなかったので実際に手元で動かして見ると以下のようなことがわかった。
${1#-}は引数の1番目の文字からハイフンを一つ取り除いたもの。例えば. hoge.sh -a testと実行したら${1#-}はaを返す。

なのでif文の意味は「ハイフンが付いていたら」という意味になる。わかりづれぇ。

set -- wp "$@"

これも全然わからなかった。
[参考]https://yash.osdn.jp/doc/ja/_set.html

Set コマンドにオペランドが与えられている場合またはオプションとオペランドを区切るハイフン二つ (--, コマンドの引数の構文参照) がコマンドライン引数に入っている場合は、現在の​位置パラメータは削除され、与えられたオペランドがそれぞれ新しく位置パラメータになります。ハイフン二つが与えられていてかつオペランドがない場合は位置パラメータはなくなります。

この文章を5分くらい見つめてようやく理解した。

つまり. hoge.sh -a testを実行すると$@-a testとなるが、 set -- wp "$@"を実行すると$@wp -a testとなるわけだ。

wpコマンドそのものに対してオプションを与えたい場合を想定していて、その他は普通にDockerfileのCMDコマンドを受け取っているのだな、と理解した。

たったこれだけの話なのに理解するのにものすごい時間を要してしまったので記録として残しておきます。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2