mousepad cmd1 # エディタは自由に選んでいい
各行に、(これまで紹介したものでいい)コマンドを選んで
一行1コマンドずつ書いていく(動作確認のためなので3,4行程度でいい)
保存して終了
lsまたは ls -lで その名前のファイルがあることを確認
実行してみる
sh cmd1
再び 編集 mousepad など
あるいは そのたびにエディタを終了せずに 保存だけでもいい
先頭行 の先頭カラムに
: (コロン)
を入れる
実はこれは略式の書き方。 正しくは 先頭行が
#!/bin/sh
保存
なお、この #! (は先頭に空白をおかずに入れること)の行には、
このスクリプトを実行するプログラムのフルパス名を書く。
一般にはこのコンピュータで使えるシェル
(sh bash 以外にもいくつかある(右図))や、
スクリプト系言語(php perl ruby等) のインタプリタをここに書く。
ls -l cmd1
chmod +x cmd1
ls -l cmd1 # 変化を確認
./cmd1 # これで起動する
# まだ完全にコマンドっぽくはない
env | grep PATH
echo $PATH # シェルの変数や環境変数は頭に$
(Windowsにも概ね同じ仕組みが使われている。 Windowsでの扱いについては、各自でチェックしておいて下さい。
mkdir ~/bin
PATH=$PATH:~/bin # この変更は今限りのもので
# この先も使うようにさせる方法は あとで述べる
echo $PATH
mv cmd1 ~/bin # エディタ は一旦終了させておくといい
これからの編集作業は
mousepad ~/bin/cmd1
# または cd ~/bin ; mousepad cmd1
ls
という名前で変な動作をするスクリプトを作ってしまった場合、元来の
ls
コマンドの実体(おそらく/bin/ls )が置かれている場所
よりも(PATH変数の中で)前にあるとこれが優先されて使われてしまうことになる。# (どのディレクトリにいてもかまわないので)
cmd1 # とだけ叩いて実行 できますよね?
PATH変数を分解する
echo $PATH | sed 's/:/ /g'
それを `` で囲む(コマンド置換)
各要素について繰り返す
for i in `echo $PATH | sed 's/:/ /g'` ; do
ls $i
done
(ついでに) この for~doneの出力全体をパイプで
次段のコマンドに渡すこともできる(右図)。
or i in `echo $PATH | sed 's/:/ /g'` ; do
ls $i
done | wc -l
ディレクトリごとのファイル数
for i in `echo $PATH | sed 's/:/ /g'` ; do
echo -n "$i: " ; ls | wc -l
done
それぞれのコマンドが何で作られているか (fileコマンドで確かめる)。
for i in `echo $PATH | sed 's/:/ /g'` ; do
file $i/*
done | less