自作のLinuxコマンドでオプションを追加しよう2

Linuxのコマンドで、任意のディレクトリ内のディレクトリやファイルをツリー状で確認できるtreeというコマンドがあります。

※treeを使用する場合は、下記コマンドでtreeコマンドを使用できるようにする必要があります。

$ sudo apt install tree

$ tree sample

のようにtreeコマンドの後にディレクトリ名を指定すると、

sample/
├── dir1
│   ├── sub1
│   └── sub2
└── dir2
    ├── sub3
    └── sub4

のように任意のディレクトリ内がどのような構成になっているか?を確認できます。


このtreeコマンドですが、

$ tree -L 1 sample

のように-L 1のようにオプション + 値を追加することで、

sample
├── dir1
└── dir2

のように出力内容を変えることができます。


今回の例であれば、-Lはツリーの深さを指定できまして、1にすることで深さ1のツリーを出力できます。


$ tree -L 2 sample

にすると、

sample
├── dir1
│   ├── sub1
│   └── sub2
└── dir2
    ├── sub3
    └── sub4

になります。


自作のLinuxコマンドでオプションを追加しようまでで作成しましたsayコマンドに値の指定を行うオプションを追加してみます。




出力内容を繰り返し出力するためにsayコマンドに-r 数字のオプションを追加してみます。

/home/pi/say.go

package main

import (
        "flag"
        "fmt"
)

func main() {
	var msg string
	var isAdd = flag.Bool("a", false, "Add exclamation mark(!)")
	var repeat = flag.Int("r", 0, "Set the number of repetitions of the output string.")

	flag.Parse()
	args := flag.Args()
	if len(args) == 1 {
		msg = args[0]
	}

	if *repeat > 0 {
		var tmp string
		for i := 0; i < *repeat; i++ {
			tmp += msg
		}
		msg = tmp
	}

	if *isAdd {
		msg += "!"
	}

	fmt.Println(msg)
}

太字で加えた箇所が出力のリピート数に関するコードです。


$ go build say.go
$ sudo mv say /usr/local/bin/

をしてコマンドの確認をしてみます。


$ say hoge
hoge
$ say -r 1 hoge
hoge
$ say -r 2 hoge
hogehoge
$ say -r 3 hoge
hogehogehoge

リピートで指定した分だけ引数で指定した文字列が増えています。


sayコマンドを--helpで確認してみますと、

$ say --help
Usage of say:
  -a    Add exclamation mark(!)
  -r int
        Set the number of repetitions of the output string.

になっていました。

マインクラフト用ビジュアルエディタを開発しています。
詳しくはinunosinsi/mcws_blockly - githubをご覧ください。