zsh その4
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
05/02/02 20:03:26過去スレ
zsh入門
http://pc.2ch.net/test/read.cgi/unix/990283346/
zsh入門 パート2
http://pc3.2ch.net/test/read.cgi/unix/1036324177/
zsh その3
http://pc5.2ch.net/test/read.cgi/unix/1080002786/
>>2-3リンク
0615名無しさん@お腹いっぱい。
2007/02/09(金) 16:02:120616名無しさん@お腹いっぱい。
2007/02/09(金) 20:21:310617名無しさん@お腹いっぱい。
2007/02/09(金) 21:22:33今回のは常識だけど、まぁまだ第1回だから今後に期待だな
0618名無しさん@お腹いっぱい。
2007/02/11(日) 15:24:290619名無しさん@お腹いっぱい。
2007/02/11(日) 17:14:190620名無しさん@お腹いっぱい。
2007/02/11(日) 18:10:440621名無しさん@お腹いっぱい。
2007/02/11(日) 19:22:49この % を出したくないんですけど、どうすればいいですか
0622621
2007/02/11(日) 19:38:350623名無しさん@お腹いっぱい。
2007/02/11(日) 19:40:34解決方法くらい書きたまえキミぃ。
0624621
2007/02/11(日) 19:43:17こんな機能があったとは
0625名無しさん@お腹いっぱい。
2007/02/16(金) 12:59:46今度はプロンプトのカスタマイズ。
0626名無しさん@お腹いっぱい。
2007/02/16(金) 13:22:22よりは
PROMPT=$'%B%{\e[31m%}%/#%{\e[m%}%b '
とか
autoload -U colors; colors
PROMPT="%B%{$fg[red]%}%/#%{$reset_color%}%b "
とかのほうがよさそうなもんだが
0627名無しさん@お腹いっぱい。
2007/02/16(金) 13:37:22> echoやprintfコマンドを使う場合もある。好きな方を選べばいい。
> ただ、コマンドだとプラットフォームごとに動いたり動かなかったりするので、
> ここでは直接書いて使っている
echo も print も printf も組み込みコマンドですがなにか
0628626
2007/02/16(金) 13:39:46正)エスケープ
orz
0629名無しさん@お腹いっぱい。
2007/02/16(金) 14:25:010630名無しさん@お腹いっぱい。
2007/02/16(金) 21:36:580631名無しさん@お腹いっぱい。
2007/02/17(土) 09:15:00それで記事が書けるなんて
0632名無しさん@お腹いっぱい。
2007/02/17(土) 10:59:40使いこなし記事(スレ住人も新たな発見がある内容)
は違うよなぁ……
0633名無しさん@お腹いっぱい。
2007/02/17(土) 12:02:360634名無しさん@お腹いっぱい。
2007/02/17(土) 12:09:58> ここ1年でzshへ移行しやすい状況が整ってきている。
> はじめるには悪くないタイミングだ。
これからzshを始める人向けだろう
0635名無しさん@お腹いっぱい。
2007/02/17(土) 12:34:490636名無しさん@お腹いっぱい。
2007/02/17(土) 13:14:31冷静になれ。
0637名無しさん@お腹いっぱい。
2007/02/17(土) 18:20:300638名無しさん@お腹いっぱい。
2007/02/17(土) 19:02:04ありえない。
もうUNIXUSERの記事の焼き直しでいいよ。
0639名無しさん@お腹いっぱい。
2007/02/17(土) 19:06:280640名無しさん@お腹いっぱい。
2007/02/17(土) 19:17:270641名無しさん@お腹いっぱい。
2007/02/17(土) 19:54:570642名無しさん@お腹いっぱい。
2007/02/17(土) 20:03:170643名無しさん@お腹いっぱい。
2007/02/17(土) 21:14:52zshrcは千行あるけど
0644名無しさん@お腹いっぱい。
2007/02/17(土) 23:16:31compsysは無しかよw
0645名無しさん@お腹いっぱい。
2007/02/18(日) 02:04:240646名無しさん@お腹いっぱい。
2007/02/18(日) 20:08:400647名無しさん@お腹いっぱい。
2007/02/24(土) 10:43:48zsh で、
if [ -e *html ];then echo "Exist";fi
とすると、
zsh: no matches found: *url
となってしまいます。
shでは期待どおりの動作をします。
zshで期待のどおりの動作をするにはどうすればよいでしょうか?
0648名無しさん@お腹いっぱい。
2007/02/24(土) 11:22:110649647
2007/02/24(土) 11:56:49こうすると、上の問題は解決しましたが、htmlで終わるファイル名を表示しようとして
ls *html
とすると、ディレクトリにhoge.htmlがあっても
ls: *html: そのようなファイルやディレクトリはありません
と出ようになりました。
この問題を解決避けるには、
いちいち、setopt NULL_GLOB, setopt GLOB
をしなければならないのでしょうか?
0650647
2007/02/24(土) 12:09:56としてもいいみたいですね。
0651名無しさん@お腹いっぱい。
2007/02/24(土) 12:41:46で
1 2 3
となります。
echo {a..c}
では
{a..c}
です。
これを
a b c
とするように出来ないでしょうか?
0652名無しさん@お腹いっぱい。
2007/02/24(土) 12:50:380653名無しさん@お腹いっぱい。
2007/02/24(土) 12:51:430654名無しさん@お腹いっぱい。
2007/02/24(土) 13:24:36setopt brace_ccl
echo {a-z}
0655名無しさん@お腹いっぱい。
2007/02/24(土) 13:33:210656651
2007/02/24(土) 13:55:06ありがとうございます。
{a..c}
ではできない、やりたかったら、
>>654
のようにしろ、ってことですね。
ありがとうございました。
0657名無しさん@お腹いっぱい。
2007/02/24(土) 20:36:400658名無しさん@お腹いっぱい。
2007/02/24(土) 22:04:30noglob と nullglob を混同してない?
noglob は glob しなくするオプション(globの否定)だけど、
null_glob はそれとは違うよ。
オレの環境では null_glob をセットしてもそんなエラーにはならないんだけど。
0659名無しさん@お腹いっぱい。
2007/02/24(土) 22:15:220660名無しさん@お腹いっぱい。
2007/02/24(土) 23:08:410661名無しさん@お腹いっぱい。
2007/02/24(土) 23:32:56ちなみに俺は履歴関連はこんだけオプション有効にしてる。
man zshoptions 読むだけでもマンドクセ状態だが・・・
setopt extended_history
setopt hist_expire_dups_first
setopt hist_ignore_all_dups
setopt hist_ignore_dups
setopt hist_ignore_space
setopt hist_reduce_blanks
setopt hist_save_no_dups
setopt hist_verify
setopt inc_append_history
setopt share_history
setopt csh_junkie_history
0662名無しさん@お腹いっぱい。
2007/02/25(日) 00:08:020663名無しさん@お腹いっぱい。
2007/02/25(日) 09:20:450664名無しさん@お腹いっぱい。
2007/02/25(日) 10:22:44addpath () {[[ -d $1 ]] && path=($path $1)}
# add $* to top of PATH list.
addpathlist() {
tmppath=
for newpath in $*
if [ -d $newpath ]; then
tmppath=($tmppath $newpath)
fi
path=($tmppath $path)
unset tmppath
}
addpathlist ~/bin /usr/local/bin /usr/local/gnu /usr/X11R6/bin /usr/local/X11R6/bin /usr/local/X11R5/bin
addpath /usr/local/gcc/bin
addpath /usr/ucb
...
0665647
2007/02/25(日) 12:49:04すみません。ウソ言ってました。
>こうすると、上の問題は解決しましたが、htmlで終わるファイル名を表示しようとして
>ls *html
>とすると、ディレクトリにhoge.htmlがあっても
>ls: *html: そのようなファイルやディレクトリはありません
>と出ようになりました。
は間違いでした。正しくは、
(setopt NULL_GLOB とすると)
*htmlにマッチするものが無い場合、
カレントディレクトリ以下のファイル、ディレクトリが全て表示される、
です。
そして、NULL_GLOBはglobにマッチするものがなかったら何も渡さない、
ということでNO_GLOBはglobしない、という違いも理解しました。
だから、当前、setopt NULL_GLOB をして*htmlにマッチするものが無かった場合は
上のような動作をするのですね。
私が初めに書いたエラーがでるのは、setopt NO_GLOBとした場合ですね。
>>659
さんのようなオプションをつけていたわけではなく、単に私の間違いでした。
>>660
さんのおっしゃるように、
if [ -e *html(N) ];then echo "Exist";fi
でもOKでした。
0666名無しさん@お腹いっぱい。
2007/02/25(日) 14:39:200667647
2007/02/25(日) 15:37:36そうですね汗
またまたいいかげんなこと言ってしまいました。
if [ -e *html(N) ];then echo "Exist";fi
はつねにExistとでます。
>>647で書いたことをやりたい場合には、
1)
setopt NULL_GLOB
if [ -e *html ];then echo "Exist";fi
(この場合はls *htmlで*htmlがなかったらlsと同じになってしまうので)
そのあとで
setopt GLOB
2)
または、
if noglob [ -e *html ];then echo "Exist";fi
が正しいようです。
0668名無しさん@お腹いっぱい。
2007/02/25(日) 16:29:49NULL_GLOB だと多分 *html(N) と変わらないよ。
あと、特に [ に拘らなければ
[[ -e *html ]] でもいいかな。
0669名無しさん@お腹いっぱい。
2007/02/25(日) 17:29:32$ [ -e test.html ] && echo found || echo not found
found
$ [ -e *.html ] && echo found || echo not found
found
$ [[ -e test.html ]] && echo found || echo not found
found
$ [[ -e *.html ]] && echo found || echo not found
not found
$ touch '*.html'
$ [[ -e *.html ]] && echo found || echo not found
found
0670名無しさん@お腹いっぱい。
2007/02/25(日) 17:39:18[ はコマンド扱い? (これも builtin だよね)
0671名無しさん@お腹いっぱい。
2007/02/25(日) 17:55:15htmlで終わるファイルが存在すれば"Exist"と表示させたい(ただしzsh: no matches foundは嫌)は、
unsetopt nomatch するのが一番だろ。
その後は [ -e *html ] でも [ -n `echo *html` ] でもおk ( [[ -e *html ]] はだめぽい )
もしnomatchが嫌なら
[ -e *html(N) '' ] && echo Exist
{ [ -e *html ] && echo Exist } 2>/dev/null
みたいなw
0672名無しさん@お腹いっぱい。
2007/02/25(日) 17:59:40昔ながらのやり方が安全かw
if ls | egrep '\.html$' >/dev/null; then echo Exists; fi
0673名無しさん@お腹いっぱい。
2007/02/25(日) 18:13:15参考:
ttp://d.hatena.ne.jp/amt/20060907/nomatch
ttp://d.hatena.ne.jp/amt/20060806/ZshNoGlob
ttp://www.ayu.ics.keio.ac.jp/~mukai/translate/zshoptions.html (man zshoptions)
0674名無しさん@お腹いっぱい。
2007/02/25(日) 18:33:09$ echo *UNKO; echo AAAAAAAAAAAAAAAAAAAAAAAA
zsh: no matches found: *UNKO
$
0675名無しさん@お腹いっぱい。
2007/02/26(月) 07:55:40> $ [ -e *.html ] && echo found || echo not found
↑は .html ファイルが2つ以上ある場合は動かない.
[ -e `ls -1 *.html|head -n 1` ] && echo found || echo not found
だとちゃんと動くが、もっとスマートなやり方はないものか...
0676名無しさん@お腹いっぱい。
2007/02/26(月) 07:59:19> $ [ -e *.html ] && echo found || echo not found
は zsh では動くね. bash では動かないけど.
でも混乱を避ける為に、↑のように書くのは良くないだろう
0677名無しさん@お腹いっぱい。
2007/02/26(月) 08:34:32(for f in *.html; do [ -f "$f" ] && return 0; done; return 1) && echo aru || echo nai
/bin/shで動く筈。
0678名無しさん@お腹いっぱい。
2007/02/26(月) 11:03:52ls *.html | wc | awk '{print $1}'
でいいじゃん
0679名無しさん@お腹いっぱい。
2007/02/26(月) 11:18:070680名無しさん@お腹いっぱい。
2007/02/26(月) 21:05:110681名無しさん@お腹いっぱい。
2007/02/26(月) 21:26:59[[ -n `echo` ]] && echo true || echo false # false
[ -n `echo *html(N)` ] && echo Exist || echo # 常にExist, だめ
[ -n `echo` ] && echo true || echo false # true
0682名無しさん@お腹いっぱい。
2007/02/27(火) 02:46:160683名無しさん@お腹いっぱい。
2007/02/27(火) 02:47:370684名無しさん@お腹いっぱい。
2007/02/27(火) 02:48:420685名無しさん@お腹いっぱい。
2007/03/02(金) 22:11:550686名無しさん@お腹いっぱい。
2007/03/03(土) 01:23:440687名無しさん@お腹いっぱい。
2007/03/03(土) 03:11:140688名無しさん@お腹いっぱい。
2007/03/05(月) 01:38:580689名無しさん@お腹いっぱい。
2007/03/05(月) 06:18:240690名無しさん@お腹いっぱい。
2007/03/07(水) 18:55:380691名無しさん@お腹いっぱい。
2007/03/07(水) 19:17:300692名無しさん@お腹いっぱい。
2007/03/08(木) 01:16:400693名無しさん@お腹いっぱい。
2007/03/16(金) 10:04:06% autoload predict-on
% predict-on
predict-on:zle:5: can only be called from widget function
0694名無しさん@お腹いっぱい。
2007/03/16(金) 14:01:130695名無しさん@お腹いっぱい。
2007/03/16(金) 20:44:04ウチではそのエラー出ないよ
ところで、恥ずかしながら predict-on は知らなかったですよ。
0696名無しさん@お腹いっぱい。
2007/03/24(土) 22:24:26久しぶりに見たから1ヶ月前へのレスだけど
path=($path(N))
でいけない?
0697663
2007/03/24(土) 23:10:35ubuntu% test=(foo bar /home)
ubuntu% echo $test
foo bar /home
ubuntu% echo $test(N)
foo bar /home
ubuntu% echo ${^test}(N)
/home
>>696だとうまくいったりいかなかったりで困ってたんですけど、rc_expand_paramのせいでした。
path=(${^path}(N)) でうまくいくみたいですね。
0698名無しさん@お腹いっぱい。
2007/04/03(火) 14:48:380699名無しさん@お腹いっぱい。
2007/04/10(火) 17:16:19bash
$ sudo rm ~foo (~foo -> /home/foo のシンボリックリンク)
シンボリックリンク ~foo が消える
zsh
% sudo rm ~foo (~foo -> /home/foo のシンボリックリンク)
Error: foo はディレクトリ
% sudo rm -r ~foo
ホームディレクトリが消える orz
0700名無しさん@お腹いっぱい。
2007/04/10(火) 17:21:46ニョロ展開をやめさせたいんなら
./~foo って指定すればいいし何が言いたいのかわからん
0701名無しさん@お腹いっぱい。
2007/04/10(火) 17:24:47違うよ。
俺は意味わかった。zshが ~の展開の際にシンボリックリンクをたどってしまう
という問題だね。Error: foo はディレクトリ の時点で気づくべき。
0702名無しさん@お腹いっぱい。
2007/04/10(火) 17:32:22foo アカウントのホームディレクトリが /usr/home/foo とかになってて、
それが /home/foo へのシンボリックリンクになってる、とかそんな感じ?
つーかなんで rm -r なんてする気になったんだろ。
0703名無しさん@お腹いっぱい。
2007/04/10(火) 17:39:59少なくとも問題という意識はわからん
(動作の話はそういうものとしか言いようがないし...
>702 も言う通り -r はそれこそ意図的じゃん)
0704名無しさん@お腹いっぱい。
2007/04/10(火) 17:41:06で解決したりする?
0705名無しさん@お腹いっぱい。
2007/04/10(火) 17:44:18そのシンボリックリンクが消えるだけ(先までたどらない)からだろ。
多分、rmでエラーが出たから rm -r にしただけだろ。
まさか、~foo が実体ディレクトリを指してるとは頭から思ってないから、
シンボリックリンクを消す意味で気軽に rm -r したと。
0706名無しさん@お腹いっぱい。
2007/04/10(火) 17:57:57その「エラーが出たから -r」ってのが意味わからん。
-f ならまだわかるけど。
0707名無しさん@お腹いっぱい。
2007/04/10(火) 18:00:07なかったのか?
0708名無しさん@お腹いっぱい。
2007/04/10(火) 18:01:32お前ずれてる。~fooなんてファイルの話じゃない。
0709名無しさん@お腹いっぱい。
2007/04/10(火) 18:02:21んじゃどういう話?
0710名無しさん@お腹いっぱい。
2007/04/10(火) 18:03:09読解力ない香具師だなぁ。
0711名無しさん@お腹いっぱい。
2007/04/10(火) 18:04:16すまんね。
詳細教えてくれよ。
0712名無しさん@お腹いっぱい。
2007/04/10(火) 18:06:19/usr/home/foo はシンボリックリンクで、実体の /home/foo を指している。
この状態で、~foo というチルダ展開は、
bashだと /usr/home/foo に展開されるが、
zshでは /home/foo に展開される。
という問題。
0713名無しさん@お腹いっぱい。
2007/04/10(火) 18:08:270714699
2007/04/10(火) 20:35:00真相は>>701, >>705さんのおっしゃる通りです。
昔 bash で
/bar$ ln -s /home/foo ~foo
として /bar/~foo を作ったのですが、もう使う必要がなくなったので今日 zsh で
/bar% rm -r ~foo
としたら、ユーザ foo のホームディレクトリ /home/foo 自体が消えてしまった
ということです。
bash では
alias rm="rm -i"
としていたので、rm のエラーに対していつもの勢いで -r の試行をしてしまいました。
>>713
私が悪いので、皆さん正解です。
■ このスレッドは過去ログ倉庫に格納されています