シェルスクリプトのフォーマッターshfmtをDockerで動かす

こんにちは。プログラマのまるりんです。

シェルスクリプトのフォーマッターshfmtを紹介します。 shfmtをDockerで動かしてみます。 以下の特に意味のないスクリプトがフォーマット対象です。 どの程度フォーマットされるのかを確認するためにcase、func、リダイレクトを使っています。

 #!/bin/sh
 echo 'hello'
  echo 'world'
func() {
  echo 'hello'
            echo 'work'
    }

func

case $# in
  0)
  echo 'no arg'
    ;;
*)
  echo 'arg'
  ;;
esac
ls>hoge.txt

それではフォーマットしてみます。

$ docker run --rm -v $(pwd):/mnt -w /mnt mvdan/shfmt:latest-alpine -i 2 -sr -w sample.sh

フォーマット後は次のように整形されました。

#!/bin/sh
echo 'hello'
echo 'world'
func() {
  echo 'hello'
  echo 'work'
}

func

case $# in
0)
  echo 'no arg'
  ;;
*)
  echo 'arg'
  ;;
esac
ls > hoge.txt

オプションの説明です。

  • Docker
    • -w: ワーキングディレクトリの指定
  • shfmt
    • -i <number>: インデントをスペース何個分で指定するか
    • -sr: リダイレクト演算子の後にスペースを入れる
    • -w: 上書き保存

シェルスクリプトがきれいにフォーマットされてかなりよい感じです(case、func、リダイレクトの部分も整えられています)。 お恥ずかしながらシェルスクリプトのフォーマッターの存在を知らなかったので今後は頻繁に使用していきたいです。