Help us understand the problem. What is going on with this article?

自作シェルスクリプトにヘルプやらバージョンメッセージを実装?する面白い方法があった

More than 1 year has passed since last update.

はじめに

これは環境変数などをexportするようなスクリプトを書く場合の方法です 

本題

とあるアプリのシェルスクリプトに個人的に面白いと感じたヘルプやバージョンのメッセージを実装している例があったので,紹介する.(ここに著作権は無いはず...)

その書き方の特徴はメッセージの内容をコメントアウトした状態で利用している点である.

script.sh
export FILENAME=$(basename $0)
## file    : ${FILENAME}
## version : 3.14
#% help info brbrbrbr
case $1 in
  v) # version
    sed -n 's/^##//p' $0 | envsubst | less
esac
実行結果
$ ./script.sh -v
file    : script.sh
version : 3.14

"-v"のオプションをつけたときは,"##"とコメントアウトしている部分が表示される.
そして, FILENAME という環境変数が展開されて出力される.

これの面白い点は

  • コメントアウトされているものを出力で利用している点
  • "envsubst"によって,コメントアウト内の環境変数が展開されて出力する点

この他にもヘルプなどでは別のコメントアウト方法("#%" etc)をすれば,
多種多様なオプションの出力に対応できる.

最後に

普通にスクリプト内のただの変数をsedで表示できる方法がないかなぁ

追記

sed -n 's/^##//p' $0 
より
awk -F' ' '/^##/{print $2}' $0 
の方が理解しやすいか?
TomKid
bash vim verilogHDL HLS C C++ haskell etc ...
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away