疑念は探究の動機であり、探究の唯一の目的は信念の確定である。

数学・論理学・哲学・語学のことを書きたいと思います。どんなことでも何かコメントいただけるとうれしいです。特に、勉学のことで間違いなどあったらご指摘いただけると幸いです。 よろしくお願いします。くりぃむのラジオを聴くこととパワポケ2と日向坂46が人生の唯一の楽しみです。

Macで自作のコマンドを作成する方法

概要
Macのターミナルから使える自分用のコマンドを作る方法を示す。
その方法は2通りあり、一つはパスを追加するのと、もう一つはシンボリックリンクを使う方法である。


注意
ここでは自作用のコマンドの作り方をまとめますが、ここで利用しているコマンド(e.g. source)やシェルスクリプトのことはまだ詳しく理解していません。単に「こうすれば自作コマンドができます」ということを示しているだけです。

前提知識と環境

やりたいこと

ホームディレクトリ配下に自作コマンドを格納するディレクトcommandを作成して、その中にnewcommandというコマンドを作成すること。


STEP 1: 自作コマンドを格納するディレクトリを作成する

自作コマンドを格納するディレクトリを作成します。

$ pwd
/Users/USENAME
$ mkdir command

任意の配下で問題ありませんが、今回はホームディレクトリ配下(/Users/USENAME)にcommand作成します。


STEP 2: 自作コマンドを作成する

command配下にnewcommandというコマンドを作成します。このとき拡張子はつけないことに注意してください。

$ cd ./command
$ vi newcommand

newcommandに実行したい処理を記入してください。今回はテストのため、Hello, New Command!を表示する簡単な処理です。

#!/bin/sh
echo "Hello, New Command!"

一行目の#!/bin/shは、コマンドnewcommandシェルスクリプトとして実行させるために必要なコードですので、必須です。

処理が書き終わったら、:wqでコマンドを保存します。


STEP 3: コマンドに実行権限をつける

作成したコマンドnewcommandに実行権限をつけます。

$ pwd
/Users/USERNAME/command
$ ls -l
-rw-r--r--  1 username  staff   0 May 29 02:35 newcommand
$ chmod 777 newcommand
$ ls -l
-rwxrwxrwx  1 username  staff   0 May 29 02:35 newcommand



STEP 4: コマンドの実行準備をおこなう

ここから2通りの方法があります。
一つ目は、現在使っている(デフォルトの)シェルzshにパス/Users/USERNAME/commandを追加する方法です。

STEP 4.1: パスを追加する

ホームディレクトリ配下にあるファイル.zshrcを修正します。

$ vi ~/.zshrc



.zshrcに次のコードを書き加えて保存します。

export PATH=$HOME/command:$PATH

あとは、再起動するかsource ~/.zshrcを実行すればOKです。
かくして、自作コマンドが実行できるようになります。
which newcommandと打つと、コマンドが認識されると思います。

$ which newcommand
/Users/USERNAME/command/newcommand
$ newcommand
Hello, New Command!


注意

sourceコマンドの理解はいまいちです。シェルスクリプト実行するためのコマンドということは知っていますが、その意味はまだわかりません。

STEP 4.2: シンボリックリンクを設定する

もう一つは、シンボリックリンクを利用する方法です。自作コマンドnewcommand/usr/local/binにリンクさせます。

$ ln -s ~/command/newcommand /usr/local/bin



かくして、自作コマンドが実行できるようになります。
which newcommandと打つと、コマンドが認識されると思います。

$ which newcommand
/usr/local/bin
$ newcommand
Hello, New Command!


注意

lnコマンドは全然わかっていません。ハードリンク(ノーオプション)とシンボリックリンク(-s)の違いもわかりません。
さらにシンボリックリンクの削除unlinkもわかっていません。




僕から以上