はじめに
みなさんターミナル使ってますか?
エンジニアになると真っ黒な画面でマトリックスみたいに、コマンドをカタカタ打ってハッカーっぽい行為を毎日のようにするかと思います。
特に、プログラミング初心者の人は教材やスクールで「ターミナル開いて」って言われると、「またかよ、何が悲しくて真っ黒い画面と話さなくちゃなんないんだよ」って気持ちになる人も多いと思います。
僕もそうでした
しかしながら、ターミナルでの操作はめちゃくちゃ便利だし、sshとかでリモートサーバーに接続した際は必須のスキルになるので、せめて、aliasや関数を登録してコマンド入力を楽にしましょう
キズナアイのような対話型AIが実装されるその日まで、alaisと関数を使って快適なターミナルライフを実現しましょう。
因みに、オススメの設定は aliasと関数で幸せになろう(実践編) にまとめました。是非使ってみてください。
そもそもなんやねん?
そもそもaliasと関数てなんなのっていう説明と使い方をざっくり説明します。
因みに、これから参照してるコマンド例は全てターミナル上で実行してるので、ターミナルを事前に立ち上げてコマンドを打って動作を確認してみてくださいね。
alias
実はaliasもコマンドです。
aliasコマンドはコマンドを別名で登録または、登録されている内容を確認するLinuxコマンドのことです。
例えば、下記のように使えます。
% hoge
zsh: command not found: hoge
% alias hoge='echo "This is alias hoge"'
% hoge
This is alias hoge
%
順番に説明すると
-
hoge
と打ってもhoge
なんてコマンドはないぜ!って怒られる - aliasコマンドを使って
hoge
を登録 -
hoge
がコマンドのように使えるようになる
要するにaliasはショートカットみたいなものです。
alias <ショートカット名>='<実行したいコマンド>'
で登録できます。
関数
bash関数とかとも言われたりします。
その名の通りシェルスクリプトで書かれた関数のことです。
例えば、下記のように使えます。
% hoge
zsh: command not found: hoge
% hoge() {
function> echo "This is function hoge"
function> }
% hoge
This is function hoge
%
順番に説明すると
-
hoge
と打ってもhoge
なんてコマンドはないぜ!って怒られる -
hoge
という名前の関数を定義する -
hoge
を呼び出せるようになる
はい、このように使い方や機能はaliasと似たようなものです。
では、どのような点が違うのかを次の項目で説明します。
aliasと関数の使い分け
aliasと関数の使い方について分かったところで、じゃあ、どのようにして使い分けるのかを簡単に説明します。
ただ、明確にこうであるべきって事はないですし、あくまで個人用なのでお好きな方を使う感じで大丈夫ですよ。
aliasを使うべき時
aliasを使うときは主に単純な処理
やコマンドの上書き
をする時です。
例えば環境変数に設定されてるPATH
を観たい時とかは単純なコマンドですみますよね。
% path
zsh: command not found: path
% alias path='echo $PATH'
% path
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
コマンドの上書き
をする場合です。
% ls
Applications Desktop
% alias ls='ls -l'
% ls
total 324
drwx------@ 3 me staff 96 3 13 2018 Applications
drwx------+ 7 me staff 224 9 7 17:45 Desktop
個人的には既存のコマンドを破壊的に変える後者のaliasの使い方はあまり好きじゃないので、前者の使い方がほとんどです。
関数を使うべき時
対して関数を使うときは主に複雑な処理
や引数を使う処理
をする時です。
特に、aliasは引数を使う事はできないので、引数を使うのであれば関数一択です。
複雑な処理
だとアバウトな言い方ですが、個人的には1行以上であれば関数にするべきだと思います。
引数を使う処理
とは下記のような処理のことです。なお、シェルスクリプトの細かい書き方については割愛します。半端ないボリュームになるので。。。
% hoge() {
function> case $1 in
function case> "s") echo "You choose s" ;;
function case> "m") echo "You choose m" ;;
function case> *) echo "You are normal" ;;
function case> esac
function> }
% hoge s
You choose s
簡単に説明すると、$1
には関数に渡した引数が格納されています。今回だとs
ですね。この第一引数で与えられたパラメータに応じてCASE式で実行処理を分けてます。
なんとなく予想できたかと思いますが、引数を使える関数の機能がかなり便利なので、よく使う一連の処理を関数で定義しておくと、ターミナル操作が格段に楽になります。
実際の使い方
さてさて、aliasと関数について単体での使い方について説明してきましたが、いちいちターミナルを起動した時にaliasを登録したり、関数を定義したりするのは現実的じゃないですよね。
そこで、こういった処理はホームディレクトリ直下の.bashrc
や.zshrc
に書いちゃいましょう。
そうすればターミナル起動したら自動で読み込んで使えるようにしてくれます。
ただし、既にログイン済みで.bashrc
を書き換えた場合は、必ずsource ~/.bashrc
を実行して読み込んでください。そうしないと追加したaliasなどが反映されません。
書き方
.bashrc
などに直接書けば大丈夫です。こんな感じで。
%cat ~/.bashrc
# alias
alias ll='ls -al'
alias d='docker'
alias dc='docker-compose'
# function
ssk() {
if [ -e ~/tmp/sshuttle.pid ]; then
echo "kill sshuttle.pid"
kill `cat ~/tmp/sshuttle.pid`
fi
}
gre() {
grep -E $1 -rl $2
}
どのファイルに書けばいい?
実はこのようなファイルって地味に多くてどのファイルに書けばいいか分からないと思います。
ざっくり下記のような使い分けがされているので参考にしてみてください。
因みに、使ってるシェルの種類によって微妙に違うのでecho $SHELL
を実行して自分が使ってるシェルを事前に確認しておいてください。
私の場合はzshを使ってるので以下の出力になります。
% echo $SHELL
/bin/zsh
bashの場合
いくつかファイルがありますが、ざっくりと以下のように使い分けられています。
結論から言うと**~/.bashrc
に記述すれば良い**です。
-
~/.bash_profile
: シェルへのログイン時に存在していれば読込まれる設定ファイル。ログイン時に一度実行されれば良い処理を書くので、環境変数を定義するexport
処理とかを記述。 -
~/.bashrc
: シェルを起動するたびに読み込まれる設定ファイル。基本的にはこのファイルに書けばいい。 -
~/.bash_logout
: シェルからのログアウト時に毎回読込まれる設定ファイル。ログアウトする時に実行したい処理はこちらに記述する。
zshの場合
ファイル名以外は殆どbashと同じなので書く意味ないかも。
結論から言うと**~/.zshrc
に記述すれば良い**です。
-
~/.zprofile
: シェルへのログイン時に存在していれば読込まれる設定ファイル。ログイン時に一度実行されれば良い処理を書くので、環境変数を定義するexport
処理とかを記述。 -
~/.zshrc
: シェルを起動するたびに読み込まれる設定ファイル。基本的にはこのファイルに書けばいい。 -
~/.zlogout
: シェルからのログアウト時に毎回読込まれる設定ファイル。ログアウトする時に実行したい処理はこちらに記述する。
オススメの設定
aliasと関数で幸せになろう(実践編) でまとめました。
個人的に有用だと思う設定をまとめてGistに挙げておいたので、コピって使ってみてください。
まとめ
いかがだったでしょうか?
今まで苦手だったターミナルで、ゴニョゴニョ遊んでみたくなってきたかと思います。
最初は面倒臭いしわけ分からないですが、とにかくコマンドを打ったりこういった便利な機能を試していくことで、必ず使いこなせるようになってきます。
全ては自分が楽をするためと思って、あなたの考える最強の.bashrc
を完成させてください。