通常なら他のツールと組み合わせたり、
エイリアス
エイリアスは手軽に設定できすぐに効果が得られる便利な機能である。他のシェルでも使える基本的なエイリアスの他に、
- 接尾辞エイリアス
- グローバルエイリアス
接尾辞エイリアス
接尾辞alias -s
で登録する。
alias -s pdf=xpdf
とすると、".pdf"
のファイルをコマンドラインのコマンド位置で
% ls foo.pdf hoge.pdf % foo.pdf zsh: command not found: foo.pdf (普通は起動できない) % ./foo.pdf zsh: permission denied: ./foo.pdf (これも起動できない) % alias -s pdf=xpdf % foo.pdf (xpdf foo.pdf が起動される)
グローバルエイリアス
通常のエイリアスはコマンドラインのコマンド位置でのみ展開されるが、
% alias foo=yes % echo foo foo (コマンド位置でないのでfooのまま) % alias -g foo=yes % echo foo yes (展開される) % unalias foo unalias: no such hash table element: yes (fooが先にyesに展開されるので、エイリアスを解除するには以下のようにする) % unalias \foo % echo foo foo
よく参照するファイル名などをグローバルエイリアスに定義しておいても便利だが、
% alias -g NL='>/dev/null' % echo hello NL ("echo hello >/dev/null" に展開されるので何も出力されない) % echo NL hello ("echo >/dev/null hello" に展開され、これも何も出力されない) % NL echo hello (">/dev/null echo hello" に展開され、これも何も出力されない) % NL chmod usage: chmod [-R [-H | -L | -P]] [-h] mode file ... % alias -g NLL='> /dev/null 2>&1' % NLL chmod (何も出力されない)
ファイル名処理
zshには、
基本オペレータ
多くのシェルで共通して使える記号をまず示しておこう。
*
(アスタリスク) - 0字以上の任意の長さの名前にマッチする。
?
(クェスチョンマーク) - 任意の1字。
[…]
- 括弧内に列挙した文字のいずれか1字にマッチ。列挙の代わりに`
0-9
'や`a-f
'のようにハイフンでつないだ文字範囲指定や、[:alnum:]
のようなlocaleに応じたシンボリックな文字種指定も利用できる。 [^…]
[…]
の逆転で、^
以降に列挙した文字にマッチしない1字にマッチする。
zsh固有のオペレータ
まずシェルオプション extended_
をセットzshrc
には記述済み
)
setopt extended_glob
これをセットすることで、
(…)
- グルーピングに用いる。後述の `|' による
「または」 の意味の及ぶ範囲や、 繰り返し指定の適用範囲を限定するために使われる。 <m-n>
- ファイル名の該当部分を整数として解釈したとき、
それがmからnの範囲にあるものにマッチする。以下の例を参照 (下限か上限の片方は省略可能)。 % ls 001 01 1 10 100 25 5 8 % echo <1-20> 001 01 1 10 5 8
x|y
- パターン x または y のいずれかにマッチする。プロセスをパイプでつなぐときの表記と区別するため、
必ず ( )
でグルーピングして用いる。% ls bar bar.
o bar. tex foo. c foo. obj bar. c bar. obj foo foo. o foo. tex % ls f*.(c|o|obj|s) foo. c foo. o foo. obj ^x
x というパターンにマッチするもの以外にマッチ。
z~x
- z というパターンにマッチするものから、xにマッチするものを除外。
x#
- パターン x が0回以上繰り返すものにマッチ。
x##
- パターン x が1回以上繰り返すものにマッチ。
最後から2番目の#
を利用し(*/)#
とすると、""
(空)、"*/"
、"*/*/"
、"*/*/*/"
、**/
という簡略表記が用意されている。
また、
(#i)
- (小文字のエル)これより後ろに書いたパターンを大文字小文字を同一視してマッチングを行なう。
(#l)
- これより後ろに書いたパターンが小文字で書かれているときのみ、
大文字小文字を同一視してマッチングを行なう。
たとえば、/usr/(#i)x11R7
は/usr/
にも/usr/
いずれにもマッチするが、/usr/(#l)x11R7
は/usr/
にはマッチするものの/usr/
にはマッチしない。
ファイル修飾子
上記のオペレータは名前を規準としたファイル選択であるが、( )
を付け、
修飾子 | 意味 |
---|---|
/ | ディレクトリ |
. | 通常ファイル |
@ | シンボリックリンク |
* | 実行ファイル |
x | 所有者実行ビットの立っているもの |
s | setuidビットの立っているもの |
uID |
所有者UIDがIDのもの:ユーザ名: のようにユーザ名を同じ文字で挟んで指定する) |
a時刻指定 |
時刻指定 のアクセス時刻を持つファイル: 時刻指定 には整数 nを書くとn 日前の時刻指定、 M '、w '、h '、 `m '、s ' を前置した整数を書くとそれぞれ 月、+ ' を付けると- ' を付けると(am-20) ' とすると `* ' にマッチするファイルのうちアクセス時刻が20分未満のものが選ばれる。次の修飾子 m 、c での時刻指定もこれと同様 |
m時刻指定 |
時刻指定の修正時刻を持つファイル |
c時刻指定 | 時刻指定 のinode更新時刻を持つファイル |
Lサイズ指定 |
ファイルサイズが サイズ指定 で指定したもの: サイズ指定 には整数を書くとバイト数の指定、 k '、m '、p ' を前置した整数を書くとそれぞれ KB、+ ' を付けると- ' を付けると(Lm-20) ' とすると `* ' にマッチするファイルのうち 20MB 未満のものが選ばれる |
- | 修飾子適用先をシンボリックリンクの指しているファイルとする |
^ | 以降に指定した修飾子の意味を反転 |
N | マッチするファイルがない場合は、 |
D | ドットで始まる名前にもマッチさせる |
ox (小文字オー) |
o の直後の文字 x に従い、
|
Ox (大文字オー) |
ox と同様だがソート順を逆に |
[m] |
マッチするもののうち m 番目のみ取り出す |
[m,n] |
マッチするもののうち m 番目から n 番目のみ取り出す |
生成ファイル名の加工
何らかのファイル名のパターン指定が展開され、
これにはヒストリ展開のときと同じように、
:h
(head)- 各ファイル名のディレクトリ名部分のみ取り出す。
:t
(tail)- 各ファイル名のファイル名部分
(最後のスラッシュ以降) のみ取り出す。 :e
(extension)- 各ファイル名の拡張子部分
(最後のピリオドより後ろ) のみ取り出す。 :r
(root)- 各ファイル名の基幹部分
(最後のピリオドより前) のみ取り出す。 :s/OLD/NEW/
(substitute)- 各ファイル名の最初に現れる OLD を NEW に置換。
:gs/OLD/NEW/
(global s)- 各ファイル名のすべての OLD を NEW に置換。
:&
- 直前の置換を繰り返し適用
たとえば *.c(:r)
とすると、*.c
ファイルの拡張子部分を取り除いた名前が得られる。
また、index.
があるディレクトリのみを選び、
% tar zcf /tmp/backup.tar.gz **/index.html(:h)
コマンドのフルパス展開
登録されたコマンド検索パスにあるコマンド名の前に `=
'を付けると、
たとえば、ls
' によって実際に起動されるプログラムを調べ、/bin/
だとしたら"/bin/
に展開される。
=ls
また、
% ls -lF =command
プロセス置換
Unixコマンドは、
たとえば、
% nkf -e file1 > file1.euc % nkf -e file2 > file2.euc % diff -ua file[12].euc | less % rm file[12].euc
このような場合に、
% diff -ua =(nkf -e file1) =(nkf -e file2) | less
zshのプロセス置換には以下の記法がある。
<(CommandLine)
- CommandLine を非同期的に起動し、
その出力が得られるファイル名 ( /dev/
や名前つきパイプなど)fd に置換される。 >(CommandLine)
- CommandLine を非同期的に起動し、
それへの入力となるファイル名に置換される。 =(CommandLine)
- CommandLine からの出力を保存した一時ファイルの名前に置換される。
ブレース展開
ブレース{ }
)
% echo {sta,men,cap}tion
station mention caption
% cp sub/dir/ecto/ry/somefile{,.bak}
(cp sub/dir/ecto/ry/somefile sub/dir/ecto/ry/somefile.bak が実行される)
zshではこれに加え、
{m..n}
-
2つの自然数 m から n までをすべて列挙したもの。
例: % echo {1..
20} 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 % echo {01..20} 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 % echo {001..20} 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 % echo {12..3} 12 11 10 9 8 7 6 5 4 3 % echo -{12..3} -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 {c1-c2}
-
文字c1 から c2までのすべての文字。シェルオプション
brace_
が必要。ccl 例: % setopt braceccl % echo {0-9A-Ma-z} 0 9 A B C D E F G H I J K L M a b c d e f
まとめ
zshが提供する様々な展開は、
次回は、