💻
自作コマンドの作りかた
ふと自作コマンドの作り方が気になったので、調べてみました。
要約
- コマンド保存用ディレクトリを作る
- PATHを通す
- コマンド内容をShellScriptで書く
- 権限を与える
作成方法
コマンドファイル保存用ディレクトリを用意する
今回は個人用のコマンドと仮定してホームディレクトリ直下に作ります。システム全体で使用するなら /usr/local/bin
配下にすべきか?
ディレクトリ名はcommands
にしました。
$ mkdir ~/commands
PATHを通す
シェルの設定ファイルにPATHを通します。
zshなら~/.zshrc
、Bashなら~/.bash_profile
です。
export PATH=$HOME/commands:$PATH
保存したらsource
で反映させましょう。
$ source ~/.zshrc
#source ~/.bash_profile
コマンド(スクリプト)を書く
先ほど作成したcommands
ディレクトリにコマンドとして動かしたい内容を記載したファイルを作成します。
このファイル名がそのままコマンド名になります。また、拡張子は付けないで作成します。
ちなみに私はtest
コマンドの存在を知らず、ファイル名をtest
にした為、自作コマンドが実行されずに嘆きました。
$ vim ~/commands/hello-world
#!/bin/sh
echo "Hello, World!"
引数を渡したい場合
引数は$1
、$2
、$3
... でアクセスできます。
$0
はスクリプト自体の名前を表します。
すべての引数に対して一度でアクセスするには、$@
や $*
を使用します。
#!/bin/sh
# 引数の例: コマンド名 arg1 arg2
echo "コマンド名: $0"
echo "第一引数: $1"
echo "第二引数: $2"
echo "すべての引数: $@"
必須の引数を設定したい
#!/bin/sh
# 引数が足りない場合のチェック
if [ "$#" -lt 1 ]; then
echo "引数を設定してください"
exit 1
fi
echo "引数は$1です"
# 他の処理...
オプションに引数を渡したい
getopts
を使用します。
#!/bin/sh
#オプションAに引数を渡す
while getopts "A:" opt; do
case ${opt} in
A )
# $OPTARG にはオプションに対する引数が格納される
echo "Option -A was triggered with argument $OPTARG"
;;
\? )
echo "Usage: $0 [-A] arg"
;;
esac
done
実行権限を付与
先ほど作成したファイルに対して実行権限を付与します。
他のユーザーが使用する場合などは権限を調整する必要がありますが、今回は自分しか使わない想定なのでとりあえず755
とします。
$ chmod 755 ~/command/hello-world
実行
$ hello-world
Hello, World!
これでコマンドの自作ができました。
出退勤用のページを叩くスクリプトを作ってコマンド化すればCLIから打刻ができたりするなあと思ったので気が向いたら作ってみます。
Discussion