SlideShare a Scribd company logo
1 of 48
Download to read offline
zshとわたし
@第04回 福岡Debian勉強会
しもかわ としひこ
@ToshiChan
toshi@smkwlab.net
Outline
•自己紹介
•zsh
•初期設定ファイルを眺めながらよも
やま話
•まとめ
自己紹介
• しもかわとしひこ(下川俊彦)
• 九州産業大学 情報科学部 情報科学科
• 専門は広域分散処理
• 89ぐらいからUNIX使い
• Ultrix, SunOS, Solaris, Linux, FreeBSD, OS X
• Debian は使ったことがないです ^^;
• ubuntu は仕事で使ってます
質問
• login shell はなんですか?
• zsh
• bash
• tcsh
• csh
• ksh
• ash
• その他?
zshとは?
Zsh is a UNIX command interpreter (shell)
usable as an interactive login shell and as a
shell script command processor. Of the
standard shells, zsh most closely resembles ksh
but includes many enhancements. Zsh has
command line editing, builtin spelling correction,
programmable command completion, shell
functions (with autoloading), a history
mechanism, and a host of other features.
zsh は良い
•なんと言っても名前がカッコ良い
•Zが付くものはすべからくカッコ良い
zsh は良い(続き)
• 最近の bash はよく知りませんが…
• RPROMPT
• global alias
• function の autoload
• 強力なパターンマッチ
• ** による再帰的なディレクトリ検索とか
• 強力なコマンドラインエディタ
• Esc-q とか
• 様々な build in function
• [[ とか
• 様々な option
zshの初期化ファイル
1. /etc/zshenv
2. $ZDOTDIR/.zshenv
3. /etc/zprofile (login shell 時のみ)
4. $ZDOTDIR/.zprofile (login shell 時のみ)
5. /etc/zshrc (対話モード時のみ)
6. $ZDOTDIR/.zshrc (対話モード時のみ)
7. /etc/zlogin (login shell 時のみ)
8. $ZDOTDIR/.zlogin (login shell 時のみ)
$ZDOTDIR
•未設定の場合 $HOME が使われる
•ZDOTDIR 設定してる人います?
僕の .z*
• 僕が使っているzsh初期化ファイルを紹介
• 決して「良い設定」の例ではないです
• 青はお気に入りの設定
• 赤は不要あるいは僕にも意味不明の設定
• 20年以上使っている設定なので ^^;
• 全て一部略なので心の目で読んでね
• 折り返しがわかりにくいので行番号を入れてます
• 普段 Debian 使ってないので、一部 OS X 用を使いますが許してね
cvs log -r1.1 .zshrc
1. RCS file: /home1/toshi/lib/cvsroot/dots/.zshrc,v
2. Working file: .zshrc
3. head: 2.18
4. branch:
5. locks: strict
6. access list:
7. symbolic names:
8. keyword substitution: kv
9. total revisions: 38; selected revisions: 1
10. description:
11. zsh initialize file.
12. ----------------------------
13. revision 1.1
14. date: 1993-03-09 13:54:55 +0900; author: toshi; state: Exp;
15. Initial revision
16. ===================================================
zshenv
• 常に実行される
• 最小限の設定に抑えることが重要
• とマニュアルに書いてある
• 基本的には環境変数・umask ぐらい?
• 対話モードに関係ある設定は入れない
• プロンプトの設定など
僕の .zshenv (1)
1. # $Id: .zshenv,v 2.23 2013/02/15 01:54:40 toshi Exp $
2. #
3. #setopt XTRACE
4. case "$-" in
5. *i*) # this is interactive shell
6. echo `LANG=C date` : reading .zshenv
7. esac
8.  
9. umask 022
僕の .zshenv (2)
1. PATH="${HOME}/bin:${HOME}/bin/${MACHTYPE}-${OSTYPE}:${HOME}/bin:
2. /opt/local/sbin:/opt/local/bin:
3. /usr/pkg/bin:/usr/pkg/sbin:
4. /usr/local/bin:
5. /usr/X11R6/bin:/usr/local/X11R6/bin:
6. /usr/openwin/bin:/usr/openwin/demo:
7. /usr/ccs/bin:/opt/SUNWspro/bin:
8. /usr/local/WordPerfect8/wpbin:
9. /usr/ucb:/usr/bin:/bin:/usr/lib:/usr/5bin:/usr/kvm:
10. /usr/local/etc:/etc:/usr/etc:/usr/hosts:
11. /usr/local/sbin:/usr/sbin:/sbin"
12. export PATH
僕の .zshenv (3)
1. LC_TIME=C
2. export LC_TIME
3. EDITOR=vi
4. export EDITOR
5.
6. # application specific environments
7. PAGER=less
8. export PAGER
9. LESS=ciMrf
10. export LESS
11.
12. # architecuture dependent
13. if [ -r ${HOME}/.zshenv-${OSTYPE} ]; then
14. . ${HOME}/.zshenv-${OSTYPE}
15. fi
16. # site dependent
17. if [ -r ${HOME}/.zshenv-local ]; then
18. . ${HOME}/.zshenv-local
19. fi
20.
21. # Finish
22. EnvironSetup='Ok'
23. export EnvironSetup
僕の .zshenv-darwin (1)
1. # $Id: .zshenv-darwin,v 1.1 2013/02/10 12:44:04 toshi Exp $
2. #
3. #setopt XTRACE
4. case "$-" in
5. *i*) # this is interactive shell
6. echo `LANG=C date` : reading .zshenv-darwin
7. esac
僕の .zshenv-darwin (2)
1. PAGER=lv
2.  
3. PATH=
4. ${HOME}/.rbenv/shims:
5. /usr/local/bin:
6. `xcode-select --print-path`/usr/bin:
7. /Applications/Ghostscript.app/bin:
8. /Applications/eclipse/android/platform-tools:
9. ${PATH}
某サーバマシンでの僕の .zshenv-local
1. # $Id: .zshenv,v 2.19 2007/08/28 04:07:50 toshi Exp $
2. #
3. #setopt XTRACE
4. case "$-" in
5. *i*) # this is interactive shell
6. echo `date` : reading .zshenv-local
7. esac
8.  
9. source ${HOME}/.keychain/${HOST}-sh
zshenv 考察
•PATHの設定は悩ましい
•環境依存、利用者依存の設定の綺麗な
共存
•つーか、そろそろ CVS 捨てたい
(閑話休題)環境設定ファイルの同期
• 2つの shell script を利用
• リポジトリからファイル群を check out (clone?)
• ウィンドウ間の cut & paste で実行できるようにシンプル
• 今のところリポジトリは CVS だけど git にしたいなぁ
• check out した script を、$HOME 他適切な場所へ deploy
• deploy つーても symlink して、最低限必要なディレクトリ
を掘るだけ
• deploy 用 script はリポジトリ内に入ってるので、多少複
雑な処理をしても大丈夫
$HOME/lib/dots/init
1. CVSWORK=${HOME}/lib
2.  
3. CVSROOT=ひ・み・つ♡
4. export CVSROOT
5.  
6. CVS_RSH=ssh
7. export CVS_RSH
8.  
9. mkdir -p ${CVSWORK}
10. cd ${CVSWORK}
11. cvs checkout dots
$HOME/lib/dots/setup
1. #! /bin/sh
2. # $Id: setup,v 2.15 2008/08/14 12:58:29 toshi Exp $
3. FILES='.z* .cvsrc .cvsignore .screenrc'
4. LN='ln -sf'
5. CP='cp'
6. CHMOD='chmod'
7. cd ${HOME}/lib/dots/
8. for i in ${FILES}
9. do
10. ${LN} lib/dots/${i} ${HOME}
11. done
12. if [ ! -d ${HOME}/.ssh ]; then
13. mkdir ${HOME}/.ssh
14. fi
15. if [ -f ${HOME}/.ssh/authorized_keys2 ]; then
16. mv ${HOME}/.ssh/authorized_keys2 ${HOME}/.ssh/
authorized_keys2.old
17. fi
18. ${CP} ${HOME}/lib/dots/authorized_keys2 ${HOME}/.ssh
19. ${CHMOD} 600 ${HOME}/.ssh/authorized_keys2
20.  
21. if [ ! -d ${HOME}/tmp ]; then
22. mkdir ${HOME}/tmp
23. fi
zprofile
•login shell 時に zshrc より前に実行
•何に使ってます?
•昔は Window System の起動に使っ
てたけど…
僕の .zprofile
1. # $Id: .zprofile,v 1.9 2006/09/12 01:19:57 toshi Exp $
2. #
3. #setopt XTRACE
4. echo `LANG=C date` : reading .zprofile
5. if [ -e /.todo ]; then
6. todo=`cat /.todo`
7. rm /.todo
8. $todo
9. exit
10. fi
zprofile 考察
•何に使うとおしゃれなんだろう?
zshrc
•対話shellで使う設定はここ
•プロンプト, alias, function, キーバイ
ンド, オプション, shell変数…
僕の .zshrc (1)
1. # $Id: .zshrc,v 2.18 2012/06/13 08:53:44
toshi Exp $
2. #setopt XTRACE
3. echo `date` : reading .zshrc
4. # This is interactive shell
5. stty erase ^h
6. # set zsh options
7. setopt append_history auto_cd auto_menu
auto_pushd
8. setopt auto_param_keys
auto_remove_slash auto_resume
9. setopt cdable_vars correct
extended_history hash_cmds
10. setopt hist_ignore_dups hist_ignore_space
11. setopt hist_no_store ignore_eof list_types
long_list_jobs notify
12. setopt numeric_glob_sort print_exit_value
13. setopt pushd_silent pushd_ignore_dups
pushd_to_home
14. setopt no_prompt_cr always_last_prompt
no_flow_control
15. setopt share_history prompt_subst
僕の .zshrc (2)1. # set zsh original variables
2. CDPATH=
3. fignore=( .o .fasl .aux .dvi .toc .class)
4. _myfpath=${HOME}/lib/dots/zfunc
5. fpath=(/usr/local/share/zsh/site-functions $fpath)
6. [[ -z $fpath[(r)$_myfpath] ]] && fpath=($_myfpath $fpath)
7. host=`echo $HOST ¦ sed -e 's/([^.]*).*/1/'`
8. DIRSTACKSIZE=10
9. HISTSIZE=100000
10. HISTFILE= /.zhistory
11. SAVEHIST=100000
12. if [[ -d /var/mail ]]; then
13. MAILSPOOL=/var/mail
14. else
15. MAILSPOOL=/usr/spool/mail
16. fi
17. MAIL=${MAIL:-${MAILSPOOL}/${LOGNAME}}
18. MAILCHECK=1
19. WATCH=notme
20. WATCHFMT='%n has %a %l from %M at %T.'
21. HELPDIR=/usr/local/lib/zsh/help
22. REPORTTIME=1
僕の .zshrc (3)
1. if [[ ! ($TERM = "screen" ¦¦ $TERM = "screen-bce") ]]; then
2. PROMPT=$'%{e[$[32+$RANDOM % 5]m%}''%S%h%s%n@%U%m
%u[%T] %c %# '$'%{e[m%
3. }'
4. RPROMPT=$'%{e[33m%}% %{e[m%}'
5. else
6. PROMPT=$'%{e[$[32+$RANDOM % 5]m%}''%S%h%s%n@%U%m
%u($WINDOW)[%T] %c %# '
7. $'%{e[m%}'
8. RPROMPT='[%U% %u]'
9. fi
僕の .zshrc (4)
1. if [[ -z "$ZSH_VERSION" ]]; then
2. ZSH=`echo $VERSION ¦ cut -d -f2`
3. else
4. ZSH=${ZSH_VERSION:s/-/./}
5. fi
6. rev=$ZSH:r:r
7. rel=$ZSH:r:e
8. pat=$ZSH:e
9. _zsh_version=`expr $rev * 1000000 + $rel * 1000 + $pat`
僕の .zshrc (4)
1. autoload acx cx harden mere namedir proto randline run-
help yp yu zed
2. autoload inc-and-show lhal mman my-rm lstmp unzip-v
3. autoload whichls up unload mk-dist ps-tty delpath
settermgw
4. autoload cdmatch multicomp tail-f
5. [[ $TERM = "xterm-color" ¦¦ $TERM = "xterm" ¦¦ $TERM =
"kterm" ¦¦ $TERM = "vt100" ¦¦ $TERM = "screen" ¦¦ $TERM
= "screen-bce" ¦¦ $TERM = "cons25" ¦¦ $TERM =
"cygwin" ]] && stty pass8 && bindkey -e
僕の .zshrc (5)
1. bindkey ^X^I reverse-menu-complete
2. bindkey ^X^P reverse-menu-complete
3. bindkey ^X^N menu-complete
4. bindkey ^X= expand-cmd-path
5. if [[ $_zsh_version -lt 3001000 ]]; then
6. bindkey ^P up-line-or-search
7. bindkey ^N down-line-or-search
8. fi
僕の .zshrc (6)
1. safe_source() {
2. if [[ $pat = pre2 ]]; then
3. return
4. fi
5. if [[ -r /$1 ]]; then
6. . /$1
7. elif [[ -r $2/$1 ]]; then
8. . $2/$1
9. fi
10.}
11.[[ -z "$EnvironSetup" ]] && safe_source .zshenv toshi
僕の .zshrc (7)
1. if [[ $_zsh_version -gt 3001007 ]]; then
2. zstyle ':completion:*' completer
'_complete'
3. zstyle :compinstall filename "$
{HOME}/.zcompsys"
4. autoload -Uz compinit
5. compinit -u
6. if [ -f /.ssh/known_hosts ]; then
7. hosts() { reply=(`sed -e 's/[ ,].*//'
/.ssh/known_hosts`) }
8. else
9. hosts() { reply=(sh.example.jp. 
10. sh.example.com. ) }
11. fi
12. fi
13. safe_source .zaliases toshi
14. safe_source .zshrc-${OSTYPE} toshi
15. safe_source .zshrc-${host} toshi
16. safe_source .zshrc-local toshi
僕の .zaliases (1)
1. # $Id: .zaliases,v 2.17 2009/07/05 02:29:59 toshi Exp $
2. #
3. #setopt XTRACE
4. echo `date` : reading .zaliases
5.  
6. alias rcd='cd'
7. alias back='cd -'
8. alias .='dirs -v'
9. alias ..='cd ..'
10. alias ,='back'
11. alias ,,='cd +2'
12. alias ,,,='cd +3'
13. alias ,,,,='cd +4'
14. alias ,,,,,='cd +5'
15. alias ,,,,,,='cd +6'
16. alias ,,,,,,,='cd +7'
17. alias ,,,,,,,,='cd +8'
18. alias ,,,,,,,,,='cd +9'
僕の .zaliases (2)
1. alias l=ls
2. case ${OSTYPE} in
3. freebsd*)
4. alias ls='ls -CFw'
5. ;;
6. cygwin*)
7. alias ls='ls -CF --show-control-chars'
8. ;;
9. *)
10. alias ls='ls -CF'
11. ;;
12. esac
13. alias ll='ls -l'
14. alias lL='ls -L'
15. alias la='ls -a'
16. alias lc='ls -c'
17. alias lt='ls -t'
18. alias lcr='lc -r'
19. alias ltr='lt -r'
20. alias lla='ll -a'
21. alias llc='ll -c'
22. alias lls='ll -s'
23. alias llt='ll -t'
24. alias llL='ll -L'
25. alias llcr='llc -r'
26. alias lltr='llt -r'
27. alias lss='ls -s'
28. alias dir='ls'
僕の .zaliases (3)
1. alias diff='diff -u'
2.  
3. alias rm='rm -i'
4. for i in $fpath; do [[ -f $i/my-
rm ]] && alias rm='my-rm' &&
break; done
5. alias cp='cp -i'
6. alias mv='mv -i'
7.  
8. alias lo='exit'
9. alias cleartmp='/bin/rm -rf /
tmp/*(ND) &'
10.alias so='source'
11.alias screen='screen -h 200'
12.alias resume='screen -x'
13.alias D='/bin/pwd'
14.alias -g LL='¦& L'
僕の .zaliases (4)
1. case "${TERM}" in
2. kterm¦xterm¦screen¦screen-bce¦
cygwin)
3. function precmd() {
4. # title
5. echo -n "e]2;${host} : $PWD007"
6. # icon
7. echo -n "e]1;${host} : $PWD007"
8. }
9. ;;
10. screen)
11. function precmd() {
12. echo -ne "033_${WinNum}${host}($
{WINDOW}) : $PWD";
13. echo -ne "033"
14. }
15. ;;
16. esac
僕の .zshrc-darwin
1. # $Id: .zshenv-darwin,v 1.1 2013/02/10
12:44:04 toshi Exp $
2. #
3. #setopt XTRACE
4. case "$-" in
5. *i*) # this is interactive shell
6. echo `LANG=C date` :
reading .zshenv-darwin
7. esac
8.  
9. PAGER=lv
10. PATH=
11. ${HOME}/.rbenv/shims:
12. /usr/local/bin:
13. `xcode-select --print-path`/usr/bin:
14. /Applications/Ghostscript.app/bin:
15. /Applications/eclipse/android/platform-tools:
16. ${PATH}
zshrc 考察
•環境依存性の切り分けが悩ましい
•OS依存の設定
•ホスト依存の設定
•今や使わなくなった多数の alias,
function その他をどうするべきか
zlogin
•login shell 時に zshrc より後に実行
•何に使ってます?
•昔はパスワード記憶系エージェントの
起動に使ってたけど…
僕の .zlogin
1. # $Id: .zlogin,v 1.13 2009/07/05 02:33:55 toshi Exp $
2. #
3. #setopt XTRACE
4. echo `LANG=C date` : reading .zlogin
5.
6. MOTD= /etc/motd
7. if [ -r ${MOTD} ]; then
8. echo -=-=-=- motd -=-=-
9. cat ${MOTD}
10. echo -=-=-=- motd -=-=-
11. fi
zlogin 考察
•今どき login shell と、非 login shell
を区別する意味はあるの?
•教えて偉い人
なにか忘れてる気が
zlogout !!
•login shell 終了時
僕の .zlogout
1. # $Id: .zlogout,v 1.1 1993/03/09 04:56:17 toshi Exp $
2. #
3. LANG=
4. echo "`hostname`: `whoami` logged out at `date`"
zlogout
•唯一、最初の check in から全く変更
なし
•ステキな使い方募集中
まとまらないまとめ
•zsh はステキ

More Related Content

What's hot

Perlで伝統芸能
Perlで伝統芸能Perlで伝統芸能
Perlで伝統芸能hitode909
 
awk v.s. bashどっちが強い?@OSC2011Tokyo
awk v.s. bashどっちが強い?@OSC2011Tokyoawk v.s. bashどっちが強い?@OSC2011Tokyo
awk v.s. bashどっちが強い?@OSC2011TokyoRyuichi Ueda
 
もにかじ2 lt @studio3104
もにかじ2 lt @studio3104もにかじ2 lt @studio3104
もにかじ2 lt @studio3104Satoshi Suzuki
 
Yapc -asia 2012 lt @studio3104
Yapc -asia 2012 lt @studio3104Yapc -asia 2012 lt @studio3104
Yapc -asia 2012 lt @studio3104Satoshi Suzuki
 
enchant.jsでゲーム制作をはじめてみよう
enchant.jsでゲーム制作をはじめてみようenchant.jsでゲーム制作をはじめてみよう
enchant.jsでゲーム制作をはじめてみようRyota Shiroguchi
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法博文 斉藤
 
オンプレでPrivate Registry使ったDockerイメージの運用について
オンプレでPrivate Registry使ったDockerイメージの運用についてオンプレでPrivate Registry使ったDockerイメージの運用について
オンプレでPrivate Registry使ったDockerイメージの運用についてYASUKAZU NAGATOMI
 
Start printf 6_takarakasai
Start printf 6_takarakasaiStart printf 6_takarakasai
Start printf 6_takarakasaitakara kasai
 
Acme minechan
Acme minechanAcme minechan
Acme minechantakesako
 
Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半Joe_noh
 
Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -Joe_noh
 
できないことはPortで外注
できないことはPortで外注できないことはPortで外注
できないことはPortで外注Joe_noh
 
菩薩でもわかる!Rで動かすExcelアドインの作り方
 菩薩でもわかる!Rで動かすExcelアドインの作り方  菩薩でもわかる!Rで動かすExcelアドインの作り方
菩薩でもわかる!Rで動かすExcelアドインの作り方 Nagi Teramo
 
Elixirだ 第1回強化版 後半
Elixirだ 第1回強化版 後半Elixirだ 第1回強化版 後半
Elixirだ 第1回強化版 後半Joe_noh
 
Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104Satoshi Suzuki
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRubyemasaka
 
Elixirだ 第2回
Elixirだ 第2回Elixirだ 第2回
Elixirだ 第2回Joe_noh
 
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョン
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョンenchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョン
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョンRyota Shiroguchi
 
New Generation Build System "Fly"
New Generation Build System "Fly"New Generation Build System "Fly"
New Generation Build System "Fly"deepblue will
 

What's hot (20)

Perlで伝統芸能
Perlで伝統芸能Perlで伝統芸能
Perlで伝統芸能
 
awk v.s. bashどっちが強い?@OSC2011Tokyo
awk v.s. bashどっちが強い?@OSC2011Tokyoawk v.s. bashどっちが強い?@OSC2011Tokyo
awk v.s. bashどっちが強い?@OSC2011Tokyo
 
もにかじ2 lt @studio3104
もにかじ2 lt @studio3104もにかじ2 lt @studio3104
もにかじ2 lt @studio3104
 
Yapc -asia 2012 lt @studio3104
Yapc -asia 2012 lt @studio3104Yapc -asia 2012 lt @studio3104
Yapc -asia 2012 lt @studio3104
 
enchant.jsでゲーム制作をはじめてみよう
enchant.jsでゲーム制作をはじめてみようenchant.jsでゲーム制作をはじめてみよう
enchant.jsでゲーム制作をはじめてみよう
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
 
オンプレでPrivate Registry使ったDockerイメージの運用について
オンプレでPrivate Registry使ったDockerイメージの運用についてオンプレでPrivate Registry使ったDockerイメージの運用について
オンプレでPrivate Registry使ったDockerイメージの運用について
 
swooleを試してみた
swooleを試してみたswooleを試してみた
swooleを試してみた
 
Start printf 6_takarakasai
Start printf 6_takarakasaiStart printf 6_takarakasai
Start printf 6_takarakasai
 
Acme minechan
Acme minechanAcme minechan
Acme minechan
 
Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半
 
Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -
 
できないことはPortで外注
できないことはPortで外注できないことはPortで外注
できないことはPortで外注
 
菩薩でもわかる!Rで動かすExcelアドインの作り方
 菩薩でもわかる!Rで動かすExcelアドインの作り方  菩薩でもわかる!Rで動かすExcelアドインの作り方
菩薩でもわかる!Rで動かすExcelアドインの作り方
 
Elixirだ 第1回強化版 後半
Elixirだ 第1回強化版 後半Elixirだ 第1回強化版 後半
Elixirだ 第1回強化版 後半
 
Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRuby
 
Elixirだ 第2回
Elixirだ 第2回Elixirだ 第2回
Elixirだ 第2回
 
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョン
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョンenchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョン
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョン
 
New Generation Build System "Fly"
New Generation Build System "Fly"New Generation Build System "Fly"
New Generation Build System "Fly"
 

Viewers also liked

無線LANデバイスについて(kernelレベル)
無線LANデバイスについて(kernelレベル) 無線LANデバイスについて(kernelレベル)
無線LANデバイスについて(kernelレベル) Yuki Uchikoba
 
企業ロゴに学ぶ 頭を使わないスライド作り 色で悩む時間を減らそう
企業ロゴに学ぶ 頭を使わないスライド作り 色で悩む時間を減らそう企業ロゴに学ぶ 頭を使わないスライド作り 色で悩む時間を減らそう
企業ロゴに学ぶ 頭を使わないスライド作り 色で悩む時間を減らそうSanae Yamashita
 
Rubotyに名前をつけて可愛がってかしこく育てて一緒に暮らしたい
Rubotyに名前をつけて可愛がってかしこく育てて一緒に暮らしたいRubotyに名前をつけて可愛がってかしこく育てて一緒に暮らしたい
Rubotyに名前をつけて可愛がってかしこく育てて一緒に暮らしたいSanae Yamashita
 
Workshop Design #5・6 「クリストファー・アレグザンダーの 『ザ・ネイチャー・オブ・オーダー』 の概念を用いてワークショップの デザイン...
Workshop Design #5・6 「クリストファー・アレグザンダーの 『ザ・ネイチャー・オブ・オーダー』 の概念を用いてワークショップの デザイン...Workshop Design #5・6 「クリストファー・アレグザンダーの 『ザ・ネイチャー・オブ・オーダー』 の概念を用いてワークショップの デザイン...
Workshop Design #5・6 「クリストファー・アレグザンダーの 『ザ・ネイチャー・オブ・オーダー』 の概念を用いてワークショップの デザイン...Takashi Iba
 
第2回 Framgia × LOUPE 勉強会 「Chrome Extensionいじってみた話」
第2回 Framgia × LOUPE 勉強会 「Chrome Extensionいじってみた話」第2回 Framgia × LOUPE 勉強会 「Chrome Extensionいじってみた話」
第2回 Framgia × LOUPE 勉強会 「Chrome Extensionいじってみた話」Takuya Mukohira
 
Future Language (フューチャー・ランゲージ)
Future Language (フューチャー・ランゲージ)Future Language (フューチャー・ランゲージ)
Future Language (フューチャー・ランゲージ)Takashi Iba
 
話題のイベントの作り方 Event Salonとは
話題のイベントの作り方 Event Salonとは 話題のイベントの作り方 Event Salonとは
話題のイベントの作り方 Event Salonとは Peatix Japan
 
Walk, Flow, and Creation: Toward Natural & Creative Living Lab
Walk, Flow, and Creation: Toward Natural & Creative Living LabWalk, Flow, and Creation: Toward Natural & Creative Living Lab
Walk, Flow, and Creation: Toward Natural & Creative Living LabTakashi Iba
 
20150928楽しいlambda
20150928楽しいlambda20150928楽しいlambda
20150928楽しいlambdaNorifumi Homma
 
「学びのパターン・ランゲージを用いた対話ワークショップ」@ DevLOVE2012
「学びのパターン・ランゲージを用いた対話ワークショップ」@ DevLOVE2012「学びのパターン・ランゲージを用いた対話ワークショップ」@ DevLOVE2012
「学びのパターン・ランゲージを用いた対話ワークショップ」@ DevLOVE2012Takashi Iba
 
The Cooking Language: Extending the Theory of Pattens for a New Way to Cook
The Cooking Language: Extending the Theory of Pattens for a New Way to CookThe Cooking Language: Extending the Theory of Pattens for a New Way to Cook
The Cooking Language: Extending the Theory of Pattens for a New Way to CookTaichi Isaku
 
つくること = 生きること : パターン・ランゲージによる創造の支援
つくること = 生きること : パターン・ランゲージによる創造の支援 つくること = 生きること : パターン・ランゲージによる創造の支援
つくること = 生きること : パターン・ランゲージによる創造の支援 Takashi Iba
 
Workshop Design #1・2 ワークショップのつくり方「全体を分化させていく」
Workshop Design #1・2 ワークショップのつくり方「全体を分化させていく」Workshop Design #1・2 ワークショップのつくり方「全体を分化させていく」
Workshop Design #1・2 ワークショップのつくり方「全体を分化させていく」Takashi Iba
 
文章のクオリティを上げる方法(井庭研レクチャーズ Vol.3)
文章のクオリティを上げる方法(井庭研レクチャーズ Vol.3)文章のクオリティを上げる方法(井庭研レクチャーズ Vol.3)
文章のクオリティを上げる方法(井庭研レクチャーズ Vol.3)Takashi Iba
 
パターン・ランゲージ『Personal Culture Patterns』で「自分らしく生きる」を考える 先生:鎌田 安里紗・仲田 未佳
パターン・ランゲージ『Personal Culture Patterns』で「自分らしく生きる」を考える 先生:鎌田 安里紗・仲田 未佳パターン・ランゲージ『Personal Culture Patterns』で「自分らしく生きる」を考える 先生:鎌田 安里紗・仲田 未佳
パターン・ランゲージ『Personal Culture Patterns』で「自分らしく生きる」を考える 先生:鎌田 安里紗・仲田 未佳schoowebcampus
 
Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)Yohei Yasukawa
 
TEDx Manchester: AI & The Future of Work
TEDx Manchester: AI & The Future of WorkTEDx Manchester: AI & The Future of Work
TEDx Manchester: AI & The Future of WorkVolker Hirsch
 

Viewers also liked (17)

無線LANデバイスについて(kernelレベル)
無線LANデバイスについて(kernelレベル) 無線LANデバイスについて(kernelレベル)
無線LANデバイスについて(kernelレベル)
 
企業ロゴに学ぶ 頭を使わないスライド作り 色で悩む時間を減らそう
企業ロゴに学ぶ 頭を使わないスライド作り 色で悩む時間を減らそう企業ロゴに学ぶ 頭を使わないスライド作り 色で悩む時間を減らそう
企業ロゴに学ぶ 頭を使わないスライド作り 色で悩む時間を減らそう
 
Rubotyに名前をつけて可愛がってかしこく育てて一緒に暮らしたい
Rubotyに名前をつけて可愛がってかしこく育てて一緒に暮らしたいRubotyに名前をつけて可愛がってかしこく育てて一緒に暮らしたい
Rubotyに名前をつけて可愛がってかしこく育てて一緒に暮らしたい
 
Workshop Design #5・6 「クリストファー・アレグザンダーの 『ザ・ネイチャー・オブ・オーダー』 の概念を用いてワークショップの デザイン...
Workshop Design #5・6 「クリストファー・アレグザンダーの 『ザ・ネイチャー・オブ・オーダー』 の概念を用いてワークショップの デザイン...Workshop Design #5・6 「クリストファー・アレグザンダーの 『ザ・ネイチャー・オブ・オーダー』 の概念を用いてワークショップの デザイン...
Workshop Design #5・6 「クリストファー・アレグザンダーの 『ザ・ネイチャー・オブ・オーダー』 の概念を用いてワークショップの デザイン...
 
第2回 Framgia × LOUPE 勉強会 「Chrome Extensionいじってみた話」
第2回 Framgia × LOUPE 勉強会 「Chrome Extensionいじってみた話」第2回 Framgia × LOUPE 勉強会 「Chrome Extensionいじってみた話」
第2回 Framgia × LOUPE 勉強会 「Chrome Extensionいじってみた話」
 
Future Language (フューチャー・ランゲージ)
Future Language (フューチャー・ランゲージ)Future Language (フューチャー・ランゲージ)
Future Language (フューチャー・ランゲージ)
 
話題のイベントの作り方 Event Salonとは
話題のイベントの作り方 Event Salonとは 話題のイベントの作り方 Event Salonとは
話題のイベントの作り方 Event Salonとは
 
Walk, Flow, and Creation: Toward Natural & Creative Living Lab
Walk, Flow, and Creation: Toward Natural & Creative Living LabWalk, Flow, and Creation: Toward Natural & Creative Living Lab
Walk, Flow, and Creation: Toward Natural & Creative Living Lab
 
20150928楽しいlambda
20150928楽しいlambda20150928楽しいlambda
20150928楽しいlambda
 
「学びのパターン・ランゲージを用いた対話ワークショップ」@ DevLOVE2012
「学びのパターン・ランゲージを用いた対話ワークショップ」@ DevLOVE2012「学びのパターン・ランゲージを用いた対話ワークショップ」@ DevLOVE2012
「学びのパターン・ランゲージを用いた対話ワークショップ」@ DevLOVE2012
 
The Cooking Language: Extending the Theory of Pattens for a New Way to Cook
The Cooking Language: Extending the Theory of Pattens for a New Way to CookThe Cooking Language: Extending the Theory of Pattens for a New Way to Cook
The Cooking Language: Extending the Theory of Pattens for a New Way to Cook
 
つくること = 生きること : パターン・ランゲージによる創造の支援
つくること = 生きること : パターン・ランゲージによる創造の支援 つくること = 生きること : パターン・ランゲージによる創造の支援
つくること = 生きること : パターン・ランゲージによる創造の支援
 
Workshop Design #1・2 ワークショップのつくり方「全体を分化させていく」
Workshop Design #1・2 ワークショップのつくり方「全体を分化させていく」Workshop Design #1・2 ワークショップのつくり方「全体を分化させていく」
Workshop Design #1・2 ワークショップのつくり方「全体を分化させていく」
 
文章のクオリティを上げる方法(井庭研レクチャーズ Vol.3)
文章のクオリティを上げる方法(井庭研レクチャーズ Vol.3)文章のクオリティを上げる方法(井庭研レクチャーズ Vol.3)
文章のクオリティを上げる方法(井庭研レクチャーズ Vol.3)
 
パターン・ランゲージ『Personal Culture Patterns』で「自分らしく生きる」を考える 先生:鎌田 安里紗・仲田 未佳
パターン・ランゲージ『Personal Culture Patterns』で「自分らしく生きる」を考える 先生:鎌田 安里紗・仲田 未佳パターン・ランゲージ『Personal Culture Patterns』で「自分らしく生きる」を考える 先生:鎌田 安里紗・仲田 未佳
パターン・ランゲージ『Personal Culture Patterns』で「自分らしく生きる」を考える 先生:鎌田 安里紗・仲田 未佳
 
Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)
 
TEDx Manchester: AI & The Future of Work
TEDx Manchester: AI & The Future of WorkTEDx Manchester: AI & The Future of Work
TEDx Manchester: AI & The Future of Work
 

Similar to zsh とわたし

お手軽並列処理
お手軽並列処理お手軽並列処理
お手軽並列処理博文 斉藤
 
Introduction to Initramfs - Initramfs-tools and Dracut
Introduction to Initramfs - Initramfs-tools and DracutIntroduction to Initramfs - Initramfs-tools and Dracut
Introduction to Initramfs - Initramfs-tools and DracutTaisuke Yamada
 
A_road_to_AMBER_simulations_ver_1.0
A_road_to_AMBER_simulations_ver_1.0A_road_to_AMBER_simulations_ver_1.0
A_road_to_AMBER_simulations_ver_1.0Satoshi Kume
 
Fabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしようFabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしようmax747
 
CMSとPerlで遊ぼう
CMSとPerlで遊ぼうCMSとPerlで遊ぼう
CMSとPerlで遊ぼうDaiki Ichinose
 
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料Yasutaka Hamada
 
Itcamp長崎2012 capistrano
Itcamp長崎2012 capistranoItcamp長崎2012 capistrano
Itcamp長崎2012 capistranokumachang_LL
 
2017-12-04 Linuxの基本構造とBashでの扱い方
2017-12-04 Linuxの基本構造とBashでの扱い方2017-12-04 Linuxの基本構造とBashでの扱い方
2017-12-04 Linuxの基本構造とBashでの扱い方浩平 渡邉
 
コンテナで作れるFaaS
コンテナで作れるFaaSコンテナで作れるFaaS
コンテナで作れるFaaS真吾 吉田
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックEmma Haruka Iwao
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0Kiwamu Okabe
 
Sakura no-yuube-20140327
Sakura no-yuube-20140327Sakura no-yuube-20140327
Sakura no-yuube-20140327Kunihiro TANAKA
 
ssh_configのススメ
ssh_configのススメssh_configのススメ
ssh_configのススメHisaharu Ishii
 

Similar to zsh とわたし (20)

お手軽並列処理
お手軽並列処理お手軽並列処理
お手軽並列処理
 
initramfsについて
initramfsについてinitramfsについて
initramfsについて
 
Mina 20130417
Mina 20130417Mina 20130417
Mina 20130417
 
実は怖くないDevOps
実は怖くないDevOps実は怖くないDevOps
実は怖くないDevOps
 
Introduction to Initramfs - Initramfs-tools and Dracut
Introduction to Initramfs - Initramfs-tools and DracutIntroduction to Initramfs - Initramfs-tools and Dracut
Introduction to Initramfs - Initramfs-tools and Dracut
 
Ilstudy001_20110806
Ilstudy001_20110806Ilstudy001_20110806
Ilstudy001_20110806
 
A_road_to_AMBER_simulations_ver_1.0
A_road_to_AMBER_simulations_ver_1.0A_road_to_AMBER_simulations_ver_1.0
A_road_to_AMBER_simulations_ver_1.0
 
Fabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしようFabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしよう
 
Niigata.pm #1
Niigata.pm #1Niigata.pm #1
Niigata.pm #1
 
CMSとPerlで遊ぼう
CMSとPerlで遊ぼうCMSとPerlで遊ぼう
CMSとPerlで遊ぼう
 
Ansible2.0と実用例
Ansible2.0と実用例Ansible2.0と実用例
Ansible2.0と実用例
 
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
 
Itcamp長崎2012 capistrano
Itcamp長崎2012 capistranoItcamp長崎2012 capistrano
Itcamp長崎2012 capistrano
 
2017-12-04 Linuxの基本構造とBashでの扱い方
2017-12-04 Linuxの基本構造とBashでの扱い方2017-12-04 Linuxの基本構造とBashでの扱い方
2017-12-04 Linuxの基本構造とBashでの扱い方
 
コンテナで作れるFaaS
コンテナで作れるFaaSコンテナで作れるFaaS
コンテナで作れるFaaS
 
SSH Tips & Tricks
SSH Tips & TricksSSH Tips & Tricks
SSH Tips & Tricks
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニック
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0
 
Sakura no-yuube-20140327
Sakura no-yuube-20140327Sakura no-yuube-20140327
Sakura no-yuube-20140327
 
ssh_configのススメ
ssh_configのススメssh_configのススメ
ssh_configのススメ
 

Recently uploaded

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 

Recently uploaded (10)

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 

zsh とわたし

  • 3. 自己紹介 • しもかわとしひこ(下川俊彦) • 九州産業大学 情報科学部 情報科学科 • 専門は広域分散処理 • 89ぐらいからUNIX使い • Ultrix, SunOS, Solaris, Linux, FreeBSD, OS X • Debian は使ったことがないです ^^; • ubuntu は仕事で使ってます
  • 4. 質問 • login shell はなんですか? • zsh • bash • tcsh • csh • ksh • ash • その他?
  • 5. zshとは? Zsh is a UNIX command interpreter (shell) usable as an interactive login shell and as a shell script command processor. Of the standard shells, zsh most closely resembles ksh but includes many enhancements. Zsh has command line editing, builtin spelling correction, programmable command completion, shell functions (with autoloading), a history mechanism, and a host of other features.
  • 7. zsh は良い(続き) • 最近の bash はよく知りませんが… • RPROMPT • global alias • function の autoload • 強力なパターンマッチ • ** による再帰的なディレクトリ検索とか • 強力なコマンドラインエディタ • Esc-q とか • 様々な build in function • [[ とか • 様々な option
  • 8. zshの初期化ファイル 1. /etc/zshenv 2. $ZDOTDIR/.zshenv 3. /etc/zprofile (login shell 時のみ) 4. $ZDOTDIR/.zprofile (login shell 時のみ) 5. /etc/zshrc (対話モード時のみ) 6. $ZDOTDIR/.zshrc (対話モード時のみ) 7. /etc/zlogin (login shell 時のみ) 8. $ZDOTDIR/.zlogin (login shell 時のみ)
  • 10. 僕の .z* • 僕が使っているzsh初期化ファイルを紹介 • 決して「良い設定」の例ではないです • 青はお気に入りの設定 • 赤は不要あるいは僕にも意味不明の設定 • 20年以上使っている設定なので ^^; • 全て一部略なので心の目で読んでね • 折り返しがわかりにくいので行番号を入れてます • 普段 Debian 使ってないので、一部 OS X 用を使いますが許してね
  • 11. cvs log -r1.1 .zshrc 1. RCS file: /home1/toshi/lib/cvsroot/dots/.zshrc,v 2. Working file: .zshrc 3. head: 2.18 4. branch: 5. locks: strict 6. access list: 7. symbolic names: 8. keyword substitution: kv 9. total revisions: 38; selected revisions: 1 10. description: 11. zsh initialize file. 12. ---------------------------- 13. revision 1.1 14. date: 1993-03-09 13:54:55 +0900; author: toshi; state: Exp; 15. Initial revision 16. ===================================================
  • 12. zshenv • 常に実行される • 最小限の設定に抑えることが重要 • とマニュアルに書いてある • 基本的には環境変数・umask ぐらい? • 対話モードに関係ある設定は入れない • プロンプトの設定など
  • 13. 僕の .zshenv (1) 1. # $Id: .zshenv,v 2.23 2013/02/15 01:54:40 toshi Exp $ 2. # 3. #setopt XTRACE 4. case "$-" in 5. *i*) # this is interactive shell 6. echo `LANG=C date` : reading .zshenv 7. esac 8.   9. umask 022
  • 14. 僕の .zshenv (2) 1. PATH="${HOME}/bin:${HOME}/bin/${MACHTYPE}-${OSTYPE}:${HOME}/bin: 2. /opt/local/sbin:/opt/local/bin: 3. /usr/pkg/bin:/usr/pkg/sbin: 4. /usr/local/bin: 5. /usr/X11R6/bin:/usr/local/X11R6/bin: 6. /usr/openwin/bin:/usr/openwin/demo: 7. /usr/ccs/bin:/opt/SUNWspro/bin: 8. /usr/local/WordPerfect8/wpbin: 9. /usr/ucb:/usr/bin:/bin:/usr/lib:/usr/5bin:/usr/kvm: 10. /usr/local/etc:/etc:/usr/etc:/usr/hosts: 11. /usr/local/sbin:/usr/sbin:/sbin" 12. export PATH
  • 15. 僕の .zshenv (3) 1. LC_TIME=C 2. export LC_TIME 3. EDITOR=vi 4. export EDITOR 5. 6. # application specific environments 7. PAGER=less 8. export PAGER 9. LESS=ciMrf 10. export LESS 11. 12. # architecuture dependent 13. if [ -r ${HOME}/.zshenv-${OSTYPE} ]; then 14. . ${HOME}/.zshenv-${OSTYPE} 15. fi 16. # site dependent 17. if [ -r ${HOME}/.zshenv-local ]; then 18. . ${HOME}/.zshenv-local 19. fi 20. 21. # Finish 22. EnvironSetup='Ok' 23. export EnvironSetup
  • 16. 僕の .zshenv-darwin (1) 1. # $Id: .zshenv-darwin,v 1.1 2013/02/10 12:44:04 toshi Exp $ 2. # 3. #setopt XTRACE 4. case "$-" in 5. *i*) # this is interactive shell 6. echo `LANG=C date` : reading .zshenv-darwin 7. esac
  • 17. 僕の .zshenv-darwin (2) 1. PAGER=lv 2.   3. PATH= 4. ${HOME}/.rbenv/shims: 5. /usr/local/bin: 6. `xcode-select --print-path`/usr/bin: 7. /Applications/Ghostscript.app/bin: 8. /Applications/eclipse/android/platform-tools: 9. ${PATH}
  • 18. 某サーバマシンでの僕の .zshenv-local 1. # $Id: .zshenv,v 2.19 2007/08/28 04:07:50 toshi Exp $ 2. # 3. #setopt XTRACE 4. case "$-" in 5. *i*) # this is interactive shell 6. echo `date` : reading .zshenv-local 7. esac 8.   9. source ${HOME}/.keychain/${HOST}-sh
  • 20. (閑話休題)環境設定ファイルの同期 • 2つの shell script を利用 • リポジトリからファイル群を check out (clone?) • ウィンドウ間の cut & paste で実行できるようにシンプル • 今のところリポジトリは CVS だけど git にしたいなぁ • check out した script を、$HOME 他適切な場所へ deploy • deploy つーても symlink して、最低限必要なディレクトリ を掘るだけ • deploy 用 script はリポジトリ内に入ってるので、多少複 雑な処理をしても大丈夫
  • 21. $HOME/lib/dots/init 1. CVSWORK=${HOME}/lib 2.   3. CVSROOT=ひ・み・つ♡ 4. export CVSROOT 5.   6. CVS_RSH=ssh 7. export CVS_RSH 8.   9. mkdir -p ${CVSWORK} 10. cd ${CVSWORK} 11. cvs checkout dots
  • 22. $HOME/lib/dots/setup 1. #! /bin/sh 2. # $Id: setup,v 2.15 2008/08/14 12:58:29 toshi Exp $ 3. FILES='.z* .cvsrc .cvsignore .screenrc' 4. LN='ln -sf' 5. CP='cp' 6. CHMOD='chmod' 7. cd ${HOME}/lib/dots/ 8. for i in ${FILES} 9. do 10. ${LN} lib/dots/${i} ${HOME} 11. done 12. if [ ! -d ${HOME}/.ssh ]; then 13. mkdir ${HOME}/.ssh 14. fi 15. if [ -f ${HOME}/.ssh/authorized_keys2 ]; then 16. mv ${HOME}/.ssh/authorized_keys2 ${HOME}/.ssh/ authorized_keys2.old 17. fi 18. ${CP} ${HOME}/lib/dots/authorized_keys2 ${HOME}/.ssh 19. ${CHMOD} 600 ${HOME}/.ssh/authorized_keys2 20.   21. if [ ! -d ${HOME}/tmp ]; then 22. mkdir ${HOME}/tmp 23. fi
  • 23. zprofile •login shell 時に zshrc より前に実行 •何に使ってます? •昔は Window System の起動に使っ てたけど…
  • 24. 僕の .zprofile 1. # $Id: .zprofile,v 1.9 2006/09/12 01:19:57 toshi Exp $ 2. # 3. #setopt XTRACE 4. echo `LANG=C date` : reading .zprofile 5. if [ -e /.todo ]; then 6. todo=`cat /.todo` 7. rm /.todo 8. $todo 9. exit 10. fi
  • 26. zshrc •対話shellで使う設定はここ •プロンプト, alias, function, キーバイ ンド, オプション, shell変数…
  • 27. 僕の .zshrc (1) 1. # $Id: .zshrc,v 2.18 2012/06/13 08:53:44 toshi Exp $ 2. #setopt XTRACE 3. echo `date` : reading .zshrc 4. # This is interactive shell 5. stty erase ^h 6. # set zsh options 7. setopt append_history auto_cd auto_menu auto_pushd 8. setopt auto_param_keys auto_remove_slash auto_resume 9. setopt cdable_vars correct extended_history hash_cmds 10. setopt hist_ignore_dups hist_ignore_space 11. setopt hist_no_store ignore_eof list_types long_list_jobs notify 12. setopt numeric_glob_sort print_exit_value 13. setopt pushd_silent pushd_ignore_dups pushd_to_home 14. setopt no_prompt_cr always_last_prompt no_flow_control 15. setopt share_history prompt_subst
  • 28. 僕の .zshrc (2)1. # set zsh original variables 2. CDPATH= 3. fignore=( .o .fasl .aux .dvi .toc .class) 4. _myfpath=${HOME}/lib/dots/zfunc 5. fpath=(/usr/local/share/zsh/site-functions $fpath) 6. [[ -z $fpath[(r)$_myfpath] ]] && fpath=($_myfpath $fpath) 7. host=`echo $HOST ¦ sed -e 's/([^.]*).*/1/'` 8. DIRSTACKSIZE=10 9. HISTSIZE=100000 10. HISTFILE= /.zhistory 11. SAVEHIST=100000 12. if [[ -d /var/mail ]]; then 13. MAILSPOOL=/var/mail 14. else 15. MAILSPOOL=/usr/spool/mail 16. fi 17. MAIL=${MAIL:-${MAILSPOOL}/${LOGNAME}} 18. MAILCHECK=1 19. WATCH=notme 20. WATCHFMT='%n has %a %l from %M at %T.' 21. HELPDIR=/usr/local/lib/zsh/help 22. REPORTTIME=1
  • 29. 僕の .zshrc (3) 1. if [[ ! ($TERM = "screen" ¦¦ $TERM = "screen-bce") ]]; then 2. PROMPT=$'%{e[$[32+$RANDOM % 5]m%}''%S%h%s%n@%U%m %u[%T] %c %# '$'%{e[m% 3. }' 4. RPROMPT=$'%{e[33m%}% %{e[m%}' 5. else 6. PROMPT=$'%{e[$[32+$RANDOM % 5]m%}''%S%h%s%n@%U%m %u($WINDOW)[%T] %c %# ' 7. $'%{e[m%}' 8. RPROMPT='[%U% %u]' 9. fi
  • 30. 僕の .zshrc (4) 1. if [[ -z "$ZSH_VERSION" ]]; then 2. ZSH=`echo $VERSION ¦ cut -d -f2` 3. else 4. ZSH=${ZSH_VERSION:s/-/./} 5. fi 6. rev=$ZSH:r:r 7. rel=$ZSH:r:e 8. pat=$ZSH:e 9. _zsh_version=`expr $rev * 1000000 + $rel * 1000 + $pat`
  • 31. 僕の .zshrc (4) 1. autoload acx cx harden mere namedir proto randline run- help yp yu zed 2. autoload inc-and-show lhal mman my-rm lstmp unzip-v 3. autoload whichls up unload mk-dist ps-tty delpath settermgw 4. autoload cdmatch multicomp tail-f 5. [[ $TERM = "xterm-color" ¦¦ $TERM = "xterm" ¦¦ $TERM = "kterm" ¦¦ $TERM = "vt100" ¦¦ $TERM = "screen" ¦¦ $TERM = "screen-bce" ¦¦ $TERM = "cons25" ¦¦ $TERM = "cygwin" ]] && stty pass8 && bindkey -e
  • 32. 僕の .zshrc (5) 1. bindkey ^X^I reverse-menu-complete 2. bindkey ^X^P reverse-menu-complete 3. bindkey ^X^N menu-complete 4. bindkey ^X= expand-cmd-path 5. if [[ $_zsh_version -lt 3001000 ]]; then 6. bindkey ^P up-line-or-search 7. bindkey ^N down-line-or-search 8. fi
  • 33. 僕の .zshrc (6) 1. safe_source() { 2. if [[ $pat = pre2 ]]; then 3. return 4. fi 5. if [[ -r /$1 ]]; then 6. . /$1 7. elif [[ -r $2/$1 ]]; then 8. . $2/$1 9. fi 10.} 11.[[ -z "$EnvironSetup" ]] && safe_source .zshenv toshi
  • 34. 僕の .zshrc (7) 1. if [[ $_zsh_version -gt 3001007 ]]; then 2. zstyle ':completion:*' completer '_complete' 3. zstyle :compinstall filename "$ {HOME}/.zcompsys" 4. autoload -Uz compinit 5. compinit -u 6. if [ -f /.ssh/known_hosts ]; then 7. hosts() { reply=(`sed -e 's/[ ,].*//' /.ssh/known_hosts`) } 8. else 9. hosts() { reply=(sh.example.jp. 10. sh.example.com. ) } 11. fi 12. fi 13. safe_source .zaliases toshi 14. safe_source .zshrc-${OSTYPE} toshi 15. safe_source .zshrc-${host} toshi 16. safe_source .zshrc-local toshi
  • 35. 僕の .zaliases (1) 1. # $Id: .zaliases,v 2.17 2009/07/05 02:29:59 toshi Exp $ 2. # 3. #setopt XTRACE 4. echo `date` : reading .zaliases 5.   6. alias rcd='cd' 7. alias back='cd -' 8. alias .='dirs -v' 9. alias ..='cd ..' 10. alias ,='back' 11. alias ,,='cd +2' 12. alias ,,,='cd +3' 13. alias ,,,,='cd +4' 14. alias ,,,,,='cd +5' 15. alias ,,,,,,='cd +6' 16. alias ,,,,,,,='cd +7' 17. alias ,,,,,,,,='cd +8' 18. alias ,,,,,,,,,='cd +9'
  • 36. 僕の .zaliases (2) 1. alias l=ls 2. case ${OSTYPE} in 3. freebsd*) 4. alias ls='ls -CFw' 5. ;; 6. cygwin*) 7. alias ls='ls -CF --show-control-chars' 8. ;; 9. *) 10. alias ls='ls -CF' 11. ;; 12. esac 13. alias ll='ls -l' 14. alias lL='ls -L' 15. alias la='ls -a' 16. alias lc='ls -c' 17. alias lt='ls -t' 18. alias lcr='lc -r' 19. alias ltr='lt -r' 20. alias lla='ll -a' 21. alias llc='ll -c' 22. alias lls='ll -s' 23. alias llt='ll -t' 24. alias llL='ll -L' 25. alias llcr='llc -r' 26. alias lltr='llt -r' 27. alias lss='ls -s' 28. alias dir='ls'
  • 37. 僕の .zaliases (3) 1. alias diff='diff -u' 2.   3. alias rm='rm -i' 4. for i in $fpath; do [[ -f $i/my- rm ]] && alias rm='my-rm' && break; done 5. alias cp='cp -i' 6. alias mv='mv -i' 7.   8. alias lo='exit' 9. alias cleartmp='/bin/rm -rf / tmp/*(ND) &' 10.alias so='source' 11.alias screen='screen -h 200' 12.alias resume='screen -x' 13.alias D='/bin/pwd' 14.alias -g LL='¦& L'
  • 38. 僕の .zaliases (4) 1. case "${TERM}" in 2. kterm¦xterm¦screen¦screen-bce¦ cygwin) 3. function precmd() { 4. # title 5. echo -n "e]2;${host} : $PWD007" 6. # icon 7. echo -n "e]1;${host} : $PWD007" 8. } 9. ;; 10. screen) 11. function precmd() { 12. echo -ne "033_${WinNum}${host}($ {WINDOW}) : $PWD"; 13. echo -ne "033" 14. } 15. ;; 16. esac
  • 39. 僕の .zshrc-darwin 1. # $Id: .zshenv-darwin,v 1.1 2013/02/10 12:44:04 toshi Exp $ 2. # 3. #setopt XTRACE 4. case "$-" in 5. *i*) # this is interactive shell 6. echo `LANG=C date` : reading .zshenv-darwin 7. esac 8.   9. PAGER=lv 10. PATH= 11. ${HOME}/.rbenv/shims: 12. /usr/local/bin: 13. `xcode-select --print-path`/usr/bin: 14. /Applications/Ghostscript.app/bin: 15. /Applications/eclipse/android/platform-tools: 16. ${PATH}
  • 41. zlogin •login shell 時に zshrc より後に実行 •何に使ってます? •昔はパスワード記憶系エージェントの 起動に使ってたけど…
  • 42. 僕の .zlogin 1. # $Id: .zlogin,v 1.13 2009/07/05 02:33:55 toshi Exp $ 2. # 3. #setopt XTRACE 4. echo `LANG=C date` : reading .zlogin 5. 6. MOTD= /etc/motd 7. if [ -r ${MOTD} ]; then 8. echo -=-=-=- motd -=-=- 9. cat ${MOTD} 10. echo -=-=-=- motd -=-=- 11. fi
  • 43. zlogin 考察 •今どき login shell と、非 login shell を区別する意味はあるの? •教えて偉い人
  • 46. 僕の .zlogout 1. # $Id: .zlogout,v 1.1 1993/03/09 04:56:17 toshi Exp $ 2. # 3. LANG= 4. echo "`hostname`: `whoami` logged out at `date`"
  • 47. zlogout •唯一、最初の check in から全く変更 なし •ステキな使い方募集中