読むだけでちょっと賢くなる、架空のまとめスレ

【疑問】よく打つ長いコマンドを短くしたい。alias と関数の違い、/etc/skel、PATH に自分の bin を足す【LPICレベル1】

17レスカテゴリ:Linux
1: 名無しさん

ls -l --color=auto とか mkdir してから cd とか、毎回同じのを打ってる
短くする方法ある?

2: 名無しさん

前提のおさらい。対話シェルは ~/.bashrc、ログインシェルは ~/.profile などを読む。毎回効かせたい設定はそこに書く

3: 名無しさん

>>1
1つのコマンドに別名を付けるなら alias
alias ll='ls -l' で ll と打つと ls -l になる
alias だけで一覧、alias ll でその中身、unalias ll で消す

4: 名無しさん

>>3
alias を作ったら ls そのものを呼ばれへんくなった

5: 名無しさん

>>4
alias ls='ls -F' を作ったあとで試した
ls -d /tmp → /tmp/(alias が効いてる)
\ls -d /tmp → /tmp(先頭にバックスラッシュで alias を飛ばす)
command ls -d /tmp → /tmp

6: 名無しさん

>>3
スクリプトの中に alias を書いたら command not found になった

7: 名無しさん

>>6
bash の man によると、対話でないシェルでは alias は展開されない(shopt -s expand_aliases を除く)。それに alias は行を読んだときに置き換わるから、同じ行で作って使っても効かへんかった。スクリプトでは関数を使う

8: 名無しさん

>>1
引数を途中に入れたいときは?

9: 名無しさん

>>8
関数にする。中では $1 などで引数を使える
mkcd() { mkdir -p "$1" && cd "$1"; }
mkcd x/y で作って移動できた
function 名前 { … } の書き方もある

10: 名無しさん

>>9
関数の一覧は declare -F、中身は type mkcd か declare -f mkcd、消すのは unset -f mkcd

11: 名無しさん

>>9
alias と関数、どっちを使うか迷う

12: 名無しさん

>>11
単に置き換えるだけなら alias、引数を途中に入れる・条件で分ける・スクリプトでも使うなら関数。どっちも ~/.bashrc に書いて、そのシェルと、そこから読む人だけに効く。Debian の ~/.bashrc は ~/.bash_aliases があれば読み込む

13: 名無しさん

>>2
新しく作ったユーザーにも最初から同じ設定を入れたい

14: 名無しさん

>>13
/etc/skel に置く。useradd -m でホームディレクトリを作るとき、/etc/skel の中身がコピーされる(useradd の man)。Debian の /etc/skel には .bashrc・.profile・.bash_logout が入ってる
コピーされるのは作るときだけやから、もういるユーザーには効かない

15: 名無しさん

>>1
自分で作ったコマンドを ~/bin に置いて、どこからでも呼びたい

16: 名無しさん

>>15
PATH に足す。export PATH="$HOME/bin:$PATH" を ~/.profile などに書く。Debian の /etc/skel/.profile には「~/bin があれば PATH の先頭に足す」行が最初から入ってる。前に足すと同じ名前の既存のコマンドより先に見つかる

17: 名無しさん

>>12
短い置き換えは alias、引数を使うなら関数、新しい人の分は /etc/skel、自分のコマンドは PATH に。全部 bashrc か profile に書く

管理人のひとこと