シェルスクリプトの静的解析ツールShellCheckをDockerで動かす
こんにちは。エンジニアのまるりんです。
シェルスクリプトは気軽に書けるのが良い反面、正しい文法で書けているのか不安になったりしますね。 ShellCheckというツールを用いれば文法に問題がないかチェックできます。 今回は以下のスクリプトに対してチェックをかけてみます。
#!/bin/sh
echo "What is your name?"
read USER_NAME
echo "Hello $USER_NAME"
echo "I will create you a file called ${USER_NAME}_file"
touch "${USER_NAME}_file"
ShellCheckはbrewでもインストールできるのですが、何やらビルドに時間がかかるようなのでDockerイメージを使用します。
$ docker run --rm -v "$PWD:/mnt" koalaman/shellcheck:stable user.sh
In user.sh line 3:
read USER_NAME
^--^ SC2162: read without -r will mangle backslashes.
For more information:
https://www.shellcheck.net/wiki/SC2162 -- read without -r will mangle backs...
検査結果が出ました。readにrオプションをつけないとバックスラッシュを読み込めないようです。 ちなみに、koalaman/shellcheckイメージのWORKDIRが/mntのため当該ディレクトリに対してボリュームしています。
$ docker history koalaman/shellcheck:stable
IMAGE CREATED CREATED BY SIZE COMMENT
3f2d7311f92e 4 months ago ENTRYPOINT ["/bin/shellcheck"] 0B buildkit.dockerfile.v0
<missing> 4 months ago COPY /bin/shellcheck /bin/ # buildkit 6.62MB buildkit.dockerfile.v0
<missing> 4 months ago WORKDIR /mnt 0B buildkit.dockerfile.v0
<missing> 4 months ago LABEL maintainer=Vidar Holen <vidar@vidarhol… 0B buildkit.dockerfile.v0
readにrを追加し、再度チェックしてみます。
-read USER_NAME
+read -r USER_NAME
$ docker run --rm -v "$PWD:/mnt" koalaman/shellcheck:stable user.sh
メッセージが表示されなくなったのでスクリプトに(少なくとも文法上は)問題ないことが示されました。