長いコマンドを打つのは面倒くさい!
最近、PHP&Laravelで開発を始めたのですが、Linux上で動作確認用のビルトインサーバーを立てるたびに、以下のコマンドを打つ必要があります。
$ php artisan serve --host 0.0.0.0
※当方の環境の場合です。--host 0.0.0.0
が不要な場合もあります。
サーバー立ち上げるたびに、いちいちタイプするのって疲れますよね。
Linux上でPHP以外の言語やフレームワークを使って開発する方も同様に、「このコマンドよく使うけど、長ったらしくていやだなあ」と思うことがあるでしょう。
そのようなコマンドをWindowsのショートカット感覚で手軽にできないかというときに登場するのがエイリアスと関数です。
エイリアスと関数はいずれもシェルに自分で作った新しいコマンドを追加する機能です。
それぞれ、使い方や特徴があるので順に紹介していきたいと思います。
エイリアスとは
エイリアスはシェルスクリプトのコマンドに別名をつける機能です。
英語で「alias」は別名という意味があります。そのまんまですね。
alias
コマンドを使って登録を行うことができます。
$ alias 登録名="登録するコマンド"
これから試しにalias
コマンドを使って機能を確認したいと思います。
ここでひとつ注意点があります。
コマンドラインからalias
コマンドを使って登録すると、再起動後使えなくなるというデメリットがあります。
回避法は後半の.bashrc
の章で解説しておりますので、最後までよろしくお願いします。**
それでは、以下のコマンドを打ってみてください。
$ alias aliastest="echo 'Alias Test.'"
これで新しいコマンド「aliastest」が登録されました。
それでは、続いてaliastest
コマンドを入力してみましょう。
echo 'Alias Test.'
を実行すると「alias aliastest」という文字列が表示されます。
aliastest
コマンドを入力すると、echo 'Alias Test.'
を入力したのと同じ結果を得ることができます。
$ aliastest
Alias Test.
「Alias aliastest」が表示されましたね。
一度に複数のコマンドを実行するエイリアスを書くためには、';'(セミコロン)を使います。
$ alias aliastest2='mkdir aliastest;cd aliastest/;touch aliastest.php'
上のコマンドaliastest2
は「ディレクトリaliastestを作成」→「ディレクトリaliastestに遷移」→「aliastest.phpを作成」を一度に行う事ができます。
エイリアスで登録したコマンドを無効化するのはunalias
コマンドを使います。
$ unalias aliastest
ここで冒頭に先述したとおり、ひとつ重大な問題点があります。
Linux環境やシェルのシステムを再起動すると、コマンドラインからalias
で登録したコマンドはリセットされてしまいます。
そこで、エイリアスを永続的に使うためには、.bashrc
にaliasコマンドを記述する必要があります。
※zshをご利用の方はbash
をzsh
、.bashrc
を.zshrc
と読み替えてください。他のシェルをご利用の方も同様にご対応お願いします。
.bashrcで永続的にエイリアスを使えるようにする
ls -a ~/
のコマンドで、ユーザーのホームディレクトリの中にどんなファイルが入っているか確認してください。
すると、その中に.bashrc
というファイルがあるはずです。
ない場合はホームディレクトリに移って、touch
コマンドで同名のファイルを生成してください。
これらのファイルをviなどのテキストエディタで開いて、先程のalias 登録名=コマンド内容
を記述すると、再起動後も永続的に登録したエイリアスを使うことができます。
$ vi ~/.bashrc
.bashrc
はシェルを起動するたびごとに1回、実行されます。
そのため、.bash_profile
を編集後、記述したエイリアスやシェル関数を使えるようにするためには、bash
コマンドでシェルを再起動させてください。
$ bash
シェル関数とは
ここまで紹介したエイリアスとは別にもうひとつ、自作コマンドを登録する方法があります。それがシェル関数です。
一般的なプログラミング言語における関数と同じような感覚でコマンドを自作することができます。
# function aliastest3
aliastest3() {
mkdir aliastest
cd aliastest
touch aliastest.php
}
シェル関数aliastest3
は先程のaliastest2
と同じ処理を実行します。
今回は詳細を割愛しますが、変数や繰り返し、ifによる条件分岐も可能です。
また、エイリアスには無い特徴として引数を使ったコマンドを作ることができます。
コマンド 引数1 引数2 引数3 ……
上記のコマンドの場合、引数1の文字列・数値が変数$1
に、引数2の文字列・数値が変数$2
に、引数3の文字列・数値が変数$3
……という具合に格納されます。
aliastest4() {
mkdir $1
cd $1
touch $2
}
上のシェル関数aliastest4
を定義後、aliastest4 aaa bbb.txt
を行うと、「ディレクトリaaaを作成」→「ディレクトリaaaに遷移」→「bbb.txtを作成」を実行します。
#シェル関数とエイリアスの違い
大きな違いとして、シェル関数は前述の通り引数を指定したり、一般的なプログラミング言語と同様の条件分岐や繰り返しが可能です。
一方で、エイリアスにできて、シェル関数にはできないこととして既存のコマンドを上書きできるという利点があります。
それでは、シェル関数とエイリアスのあわせ技として次のスクリプトを御覧ください。
cdandls() {
ls -a $1
cd $1
}
alias cd='cdandls'
まず、こちらのシェルスクリプトではディレクトリ遷移とそこにあるファイルを表示するシェル関数cdandls
を定義しています。
その後、alias
コマンドでcd
コマンドをシェル関数cdandls
の処理を行うコマンドとして上書きしています。
【参考】
https://qiita.com/b4b4r07/items/8cf5d1c8b3fbfcf01a5d
同様のことをやりたい場合は、他にも別解があります。
#最後に
シェルの世界は非常に奥が深いので、カスタマイズに夢中になって開発がおろそかにならないように気をつけてください!
色んな人が自分だけの.bashrcを公開していますので、参考にするのもいいかもしれません。
それでは良き開発ライフを!