概要
普段の開発業務で切っても切り離せないターミナル。
みなさんこんな経験ありませんか?
- コマンドが長くて覚えられない
- コマンドの結果が見にくい
私自身、長いコマンドを覚えることが苦手な一人です。
そこで、今回は自作のコマンドを作って便利にターミナルを使うライフハックをご紹介します。
サンプルのコードは自由に使っていただいて大丈夫です。
コマンドエイリアス
こちらは、単純によく使うコマンドを別の名前をつけて、使いやすくする方法です。
設定の仕方
~/.zshrc にコマンドのエリアス記述を書くことで実行できるようになります
例 ls -la を llで呼び出せるようにする
~/.zshrc
# 追記
alias ll='ls -la'
現在のターミナルに反映させる
$ source ~/.zshrc
実際に実行してみる
wotsuka2@MBPC02FV44PQ05P: ~
$ ll
total 104800
drwxr-xr-x+ 67 wotsuka2 staff 2144 6 7 13:42 .
drwxr-xr-x 6 root admin 192 3 26 16:21 ..
-r-------- 1 wotsuka2 staff 7 7 6 2021 .CFUserTextEncoding
-rw-r--r--@ 1 wotsuka2 staff 26628 6 6 17:00 .DS_Store
drwx------+ 58 wotsuka2 staff 1856 6 6 16:16 .Trash
drwxr-xr-x 12 wotsuka2 staff 384 6 2 11:37 .bin
-rw-r--r-- 1 wotsuka2 staff 446 6 2 11:30 .gitconfig
-rw-r--r--@ 1 wotsuka2 staff 82 6 1 11:07 .gitflow_export
-rw-r--r--@ 1 wotsuka2 staff 13 6 13 2021 .gitignore_global
-rw-r--r--@ 1 wotsuka2 staff 27 6 13 2021 .hgignore_global
drwxr-xr-x 4 wotsuka2 staff 128 7 30 2021 .kube
-rw------- 1 wotsuka2 staff 60 6 6 12:17 .lesshst
drwxr-xr-x 8 wotsuka2 staff 256 7 8 2021 .mume
drwxr-xr-x 200 wotsuka2 staff 6400 6 6 19:07 .pdepend
drwxr-xr-x 4 wotsuka2 staff 128 7 5 2021 .pyenv
-rw------- 1 wotsuka2 staff 32 7 6 2021 .python_history
drwxr-xr-x 15 wotsuka2 staff 480 6 2 14:18 .ssh
-rw-r--r--@ 1 wotsuka2 staff 0 6 2 11:30 .stCommitMsg
-rw-r--r-- 1 wotsuka2 staff 326 7 5 2021 .tcshrc
-rw------- 1 wotsuka2 staff 25574 6 7 13:42 .viminfo
drwxr-xr-x 4 wotsuka2 staff 128 7 1 2021 .vscode
-rw-r--r-- 1 wotsuka2 staff 210 2 22 16:20 .wget-hsts
-rw-r--r-- 1 wotsuka2 staff 609 7 5 2021 .xonshrc
-rw-r--r-- 1 wotsuka2 staff 47668 10 7 2021 .zcompdump
-rw-r--r--@ 1 wotsuka2 staff 113 1 24 13:55 .zprofile
drwxr-xr-x 5 wotsuka2 staff 160 7 19 2021 .zsh
-rw------- 1 wotsuka2 staff 21552 6 6 12:48 .zsh_history
drwx------ 48 wotsuka2 staff 1536 6 6 17:45 .zsh_sessions
-rw-r--r--@ 1 wotsuka2 staff 1330 3 2 14:53 .zshrc
drwx------@ 3 wotsuka2 staff 96 6 28 2021 Applications
drwx------@ 28 wotsuka2 staff 896 6 6 20:07 Desktop
drwx------+ 4 wotsuka2 staff 128 7 2 2021 Documents
drwx------@ 11 wotsuka2 staff 352 6 6 19:58 Downloads
drwx------@ 97 wotsuka2 staff 3104 4 25 20:45 Library
drwx------ 9 wotsuka2 staff 288 4 12 12:38 Movies
drwx------+ 4 wotsuka2 staff 128 7 2 2021 Music
drwx------+ 7 wotsuka2 staff 224 4 12 10:30 Pictures
drwxr-xr-x+ 4 wotsuka2 staff 128 6 25 2021 Public
複雑な処理をしたい場合
複雑な処理をしたい場合には、ShellScriptを使用すると思います。
こんな時にコマンドの置き場所に困りますよね?
AのプロジェクトでもBのプロジェクトでも使用するといった場合、それぞれにシェルスクリプトを置くのはメンテナンス性も悪化しますし、
何より、設置した場所がわからなくなってしまって結局使わなくなってしまったり
そんな時は、今回の本題でもある、自作コマンドを作ろうというものになります
設置方法
1. ホームディレクトリ配下に .binフォルダを作成
wotsuka2@MBPC02FV44PQ05P: ~
$ mkdir .bin
2. 作成した.binに対してPATHを通す
~/.zshrc
# 追記
export PATH=$HOME/.bin:$PATH
3. 現在のターミナルに反映させる
$ source ~/.zshrc
これで下準備は完了
あとは、作成した ~/.bin 配下に拡張子を外したShellScriptを設置
4. 実行権限を付与する
chmod +x ./設置したシェルスクリプト名
5. 実際に実行する
$ 設置したシェルスクリプト名
実行結果が出てきます
便利なgit関連サンプルコード
git のブランチに名前をつける
git_bra : 名前をつけたブランチ一覧を表示するコード
#!/bin/zsh
for bra in `git branch`; do
if [ $bra = "*" ]; then
echo -ne "\e[32m※ \e[m "
else
echo "${bra}"
echo -n "└"
git config branch.$bra.description
echo "\n------------------"
fi
done
echo "ブランチへのコメントは 'git_combra'"
git_combra : ブランチに名前をつける
#!/bin/zsh
for bra in `git branch`; do
if [ $bra = "*" ]; then
echo -ne "\e[32m※ \e[m "
else
echo "${bra}"
echo -n "└"
git config branch.$bra.description
echo "\n------------------"
fi
done
echo "どのブランチのコメントを書きますか?"
read branch
git branch --edit-description $branch
gitのブランチ間差分処理系
git_export : 特定のブランチ間で差分のあるファイルのみを階層を維持して抽出
#!/bin/zsh
for bra in `git branch`; do
if [ $bra = "*" ]; then
echo -ne "\e[32m※ \e[m "
else
echo "${bra}"
echo -n "└"
git config branch.$bra.description
echo "\n------------------"
fi
done
echo "どのブランチとの差分を取得しますか?"
read branch
git archive --format=zip --prefix=_diff/ HEAD `git diff ${branch} --diff-filter=ACMR --name-only` -o _diff.zip
git_diff : 差分のあるファイルのファイル名を見やすく表示
#!/bin/zsh
brunch=$1
function select_branch {
echo "\n------------------\n"
for bra in `git branch`; do
if [ $bra = "*" ]; then
echo -ne "\e[32m※ \e[m "
else
echo "${bra}"
echo -n "└"
git config branch.$bra.description
echo "\n------------------"
fi
done
echo 比較したいブランチ名を入力してください
read brunch
if [ -z $brunch ] ; then
select_branch
fi
}
if [ -z $brunch ] ; then
select_branch
fi
next_target=0
for bra in `git branch`; do
if [ $next_target = 1 ]; then
next_target=0
echo "\n比較ブランチ"
echo -e "\e[32m${bra}\e[m => \e[32m${brunch}\e[m "
fi
if [ $bra = "*" ]; then
next_target=1
fi
done
echo "\n------------------\n"
for diff in `git diff $brunch --name-status`; do
case "$diff" in
"A" ) echo -ne "- \e[31m追加\e[m : ";;
"C" ) echo -ne "- \e[31mコピー\e[m : ";;
"D" ) echo -ne "- \e[33m削除\e[m : ";;
"M" ) echo -ne "- \e[32m変更\e[m : ";;
"R" ) echo -ne "- \e[31mリネーム\e[m : ";;
"T" ) echo -ne "- タイプ : ";;
"U" ) echo -ne "- 追跡無し : ";;
"X" ) echo -ne "- 不明 : ";;
"B" ) echo -ne "- 破損 : ";;
* ) echo $diff
esac
done
echo "\n------------------\n"