ls -l --color=auto とか mkdir してから cd とか、毎回同じのを打ってる
短くする方法ある?
【疑問】よく打つ長いコマンドを短くしたい。alias と関数の違い、/etc/skel、PATH に自分の bin を足す【LPICレベル1】
前提のおさらい。対話シェルは ~/.bashrc、ログインシェルは ~/.profile などを読む。毎回効かせたい設定はそこに書く
>>1
1つのコマンドに別名を付けるなら aliasalias ll='ls -l' で ll と打つと ls -l になるalias だけで一覧、alias ll でその中身、unalias ll で消す
>>3
alias を作ったら ls そのものを呼ばれへんくなった
>>4alias ls='ls -F' を作ったあとで試したls -d /tmp → /tmp/(alias が効いてる)\ls -d /tmp → /tmp(先頭にバックスラッシュで alias を飛ばす)command ls -d /tmp → /tmp
>>3
スクリプトの中に alias を書いたら command not found になった
>>6
bash の man によると、対話でないシェルでは alias は展開されない(shopt -s expand_aliases を除く)。それに alias は行を読んだときに置き換わるから、同じ行で作って使っても効かへんかった。スクリプトでは関数を使う
>>1
引数を途中に入れたいときは?
>>8
関数にする。中では $1 などで引数を使えるmkcd() { mkdir -p "$1" && cd "$1"; }mkcd x/y で作って移動できたfunction 名前 { … } の書き方もある
>>9
関数の一覧は declare -F、中身は type mkcd か declare -f mkcd、消すのは unset -f mkcd
>>9
alias と関数、どっちを使うか迷う
>>11
単に置き換えるだけなら alias、引数を途中に入れる・条件で分ける・スクリプトでも使うなら関数。どっちも ~/.bashrc に書いて、そのシェルと、そこから読む人だけに効く。Debian の ~/.bashrc は ~/.bash_aliases があれば読み込む
>>2
新しく作ったユーザーにも最初から同じ設定を入れたい
>>13
/etc/skel に置く。useradd -m でホームディレクトリを作るとき、/etc/skel の中身がコピーされる(useradd の man)。Debian の /etc/skel には .bashrc・.profile・.bash_logout が入ってる
コピーされるのは作るときだけやから、もういるユーザーには効かない
>>1
自分で作ったコマンドを ~/bin に置いて、どこからでも呼びたい
>>15
PATH に足す。export PATH="$HOME/bin:$PATH" を ~/.profile などに書く。Debian の /etc/skel/.profile には「~/bin があれば PATH の先頭に足す」行が最初から入ってる。前に足すと同じ名前の既存のコマンドより先に見つかる
>>12
短い置き換えは alias、引数を使うなら関数、新しい人の分は /etc/skel、自分のコマンドは PATH に。全部 bashrc か profile に書く
管理人のひとこと
- alias は1つのコマンドに別名を付ける(
alias ll='ls -l'、一覧はalias、削除はunalias)。先頭に\を付けるかcommandで alias を飛ばせる。対話でないシェル(スクリプト)では展開されない。 - 関数は
名前() { …; }かfunction 名前 { …; }。$1などで引数を使え、スクリプトでも使える。一覧はdeclare -F、削除はunset -f。 - /etc/skel の中身は useradd -m でホームを作るときにコピーされる。すでにいるユーザーには効かない。
- 自分のコマンドの置き場所は
export PATH="$HOME/bin:$PATH"のように PATH に足す。設定は ~/.bashrc や ~/.profile に書いて毎回効かせる。