- 1 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/12/12(金) 00:54:20 ]
- zshについて語るスレ
www.zsh.org/ zsh.sourceforge.net/ ・過去ログ zsh その5 pc11.2ch.net/test/read.cgi/unix/1212677877/ zsh その4 pc11.2ch.net/test/read.cgi/unix/1107342206/ zsh その3 pc5.2ch.net/test/read.cgi/unix/1080002786/ zsh入門 パート2 pc3.2ch.net/test/read.cgi/unix/1036324177/ zsh入門 pc.2ch.net/test/read.cgi/unix/990283346/
- 932 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/03/18(日) 01:35:14.43 ]
- ググって最初に出てきたものくらいは当然試してるだろうけど、
「試したけど駄目だった」くらいは書け > Remove ~/.zcompdump and restart zsh.
- 933 名前:928 mailto:sage [2012/03/18(日) 02:16:08.50 ]
- >>932
実は.zcompdump消すのは試してたんだけど、問題がでたりでなかったりで よく分からずじまいだった。・・・で、今一度調べてやっと分かりました。 .zprofileにて if [[ $SHELL == /bin/zsh ]] ;then SHELL=$HOME/bin/zsh exec $SHELL fi とすることでログインシェルの/bin/zshを最新のzshに切り替えてたんだけど、 インタラクティブシェルは.zprofileを読み込まないのを忘れてました。 新しいzshが作った.zcompdumpを古いzshで読んだのでこうなったと。 実にくだらないミスで・・・orz。皆さんお騒がせしました。
- 934 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/03/21(水) 23:26:33.31 ]
- 以下のようなディレクトリ構成のところで、hoge下にdir1/dir2へのシンボリックリンクがあるとします。
$tree hoge hoge |-- dir1 | |-- dir2 | |-- dir3 | `-- dir4 `-- dir2 -> dir1/dir2/ dir2にcdし、「cd ../」まで打ってからTAB押すと、dir2〜dir4が候補表示され、 実際に「cd ..」するとhoge下にcdします。 ここで、補完をdir2〜dir4じゃなくて、hoge下のdir1〜dir2となるような方法はないですか? ちなみにbashだとその仕様みたいです。
- 935 名前:名無しさん@お腹いっぱい。 [2012/03/21(水) 23:38:28.15 ]
- setopt chaselinks ?
- 936 名前:934 mailto:sage [2012/03/23(金) 00:19:46.27 ]
- >>935
それだと「cd dir2」でdir1/dir2に移動するだけなんで、やりたいことと違います。
- 937 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/03/24(土) 04:19:32.53 ]
- こんな方向でどか
_directorys_symlink () { local pre="${PREFIX%/*}/"; local -a tmp; tmp=($(cd "$pre" && echo *)); compadd -f -p "$pre" -W "$(cd "$pre" && pwd -P)/" "$@" -a tmp } _cd_symlink () { local expl; _wanted directorys-symlink expl 'directory when retain symbolic links' _directorys_symlink } _cd_wrapped () { local pre="./${PREFIX%/*}" ret=1; [[ "$(cd "$pre" 2>/dev/null && pwd -P)" != "$(cd -P "$pre" 2>/dev/null && pwd)" ]] && _cd_symlink && ret=0; _cd && ret=0; return ret } compdef _cd_wrapped cd 色々足らんけど
- 938 名前:934 mailto:sage [2012/03/24(土) 18:36:46.18 ]
- >>937
非常に申し訳ないですけど、さすがにそれは使う気がしないですw でも、ありがとうございます。
- 939 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/03/24(土) 22:21:42.30 ]
- それは残念。でもないか。
よく知らないけど、多分 cd の補完処理を直さないと無理じゃないかな。 ワーキングディレクトリのシンボリックリンクを残して path を辿るのは cd の特殊な仕様みたいだけど、 cd の補完がそれを考慮せず通常の path 補完をしているようだ。 なんで _cd を直すか cd の compdef を対応版に変える必要がある …ように見える。
- 940 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/03/24(土) 22:27:23.24 ]
- 関係ないけど compadd の -P と -p の違いがよくわからない。
なんか前調べた気もするけどなんだったかな…
- 941 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/03/27(火) 22:42:55.78 ]
- 今日rsyncを使ってて妙なことに遭遇したのですが、zshスクリプトにおいて
ディレクトリのコピーを以下のようにしていたところ、たまにrsyncのコピーが 正しくなされないことが分かりました。 while :;do rsync -av dir.org/ dir 〜dir内のファイルを書き換える処理〜 done rsyncの直前で dir.org と dir の中身を見ると確かに更新されているのですが、 rsyncはそれらのコピーをスルーしていました。今のところ以下が分かっています。 @上記現象は再現性が一定でない(正常コピーできるときもある) Arsyncの直前でsleep 1を入れると何故か正常にコピー Bbashだと無問題 zshの問題とも限らない気がしますが、このスレの方々は経験豊富だと思うのでお尋ねします。 何かアドバイスあればお願いします。
- 942 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/03/30(金) 11:06:21.55 ]
- , -'"´  ̄`丶、_
,.∩ `ヽ 〃∪'´ ̄`二二人\ ヽ | ツ´ ̄ ̄ ̄ ̄´ ヾ ヽ. ', |ハ ,ニ、 ,. - 、 | | | l | | ハ ィハ ,二ヽ. | | | | | 同じ板にコピペするとそのままだけど、 | | | じ' |トJ〉 /)} l | 違う板にコピペすると鬼のような怖い顔 | ハ 、'_,  ̄,, 厶イ川| に変わる摩訶不思議な佳子様コピペ。 l l /\ .. イV\川 | ,' l l ,イ `l ̄´ / /ヽl l l | l ハ `メ、 〃 ヽヽ、__ノ
- 943 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/03/31(土) 00:58:41.59 ]
- dir内の〜 がなにかによるんじゃないの。
つーか dir が dest なんだよね。それだとコピーしない気がするけど、するんだね。 rsync はよーしらんから勘違いしてるかな。
- 944 名前:941 mailto:sage [2012/03/31(土) 21:41:34.17 ]
- すいません、自己解決しました。以下、zshとは関係ない話で恐縮ですがいちおう報告します。
rsyncはタイムスタンプを見てコピーするか否か判断しますが、>>941のファイル書き換え処理が 一瞬で終わるためにタイムスタンプが変化しないのが原因でした。 実際、ls -l --full-timeで見ると↓のように秒以降が全部0になっています。 -rw-r--r-- 1 hoge users 326 2012-03-31 21:24:24.000000000 +0900 file ちなにみ環境はCentOS6.2です。おそらく、秒以降のタイムスタンプも記録するシステムならば 今回の問題は起こらないはずだと思います。あと、>>941で言った@とAも勘違いでした。 この現象がランダムに出たために、誤って解釈してしまいました。失礼いたしました。
- 945 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/04/27(金) 23:45:48.02 ]
- ls とかのソートって unsetopt numeric_glob_sort の場合は以下の順ですよね?
特殊文字( _ を除く) 数字 大文字 _ 小文字 実は、あるホストへ自宅からログインすると上記の通りなのが、 職場からログインすると「 _ 」の存在が無視されたようにソートされます。 たとえば、A _b C というファイルがA C _b の順でソートされます。 こんなことってあるんですかね?全く同じホストにログインしてるのだから、 もう残る違いはログイン元の端末環境ぐらいしか・・・
- 946 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/04/27(金) 23:58:15.17 ]
- >>945
> 大文字 > _ > 小文字 > たとえば、A _b C というファイルがA C _b の順でソートされます。 大文字 大文字 _ の順になってる ってのは正常な動作じゃないのか?
- 947 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/04/28(土) 00:11:03.30 ]
- >>946
すいません、間違えました。以下の意味に訂正します。 「辞書順で A C _B となるのが、A _B C となってしまう」
- 948 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/04/28(土) 00:34:14.98 ]
- LC_COLLATEの値は?
- 949 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/04/28(土) 14:06:53.07 ]
- >>948
自宅からの接続ですが、空でした。 こうなったら、自宅からと職場からとで環境変数が同じかどうか調べるしかないですね。 ところで「 _ 」って特殊文字には入らないんですかね?
- 950 名前:名無しさん@お腹いっぱい。 [2012/04/28(土) 17:38:50.08 ]
- LC_COLLATEをみるなら
それより優先されるLC_ALLと 最後の砦のLANGも見ないと…
- 951 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/04/28(土) 21:22:15.90 ]
- >>949
ていうか ascii 順でしょ。
- 952 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/04/28(土) 21:32:43.75 ]
- $ LC_COLLATE=en_US.UTF-8 ls
a _a b _b $ LC_COLLATE=C ls _a _b a b
- 953 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/04/28(土) 21:59:07.34 ]
- てか、「lsとかのソート」の時点でzshもsetoptも関係なくね?
- 954 名前:名無しさん@お腹いっぱい。 [2012/04/28(土) 22:08:06.56 ]
- そうは思ったがきっとglobの展開のことだと汲み取ってあげたい。
- 955 名前:名無しさん@お腹いっぱい。 [2012/04/28(土) 22:10:50.41 ]
- lsは表示するファイルを自力でソートしているのでlsの問題。
(directory entryの出現順のままソートせずに表示するオプションがある) glob展開の結果の順序はシェルの問題。
- 956 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/04/28(土) 22:15:19.85 ]
- $ LC_COLLATE=en_US.UTF-8 zsh -c 'echo *'
a _a b _b $ LC_COLLATE=C zsh -c 'echo *' _a _b a b
- 957 名前:名無しさん@お腹いっぱい。 [2012/04/30(月) 00:17:44.41 ]
- 最近はzshあんま更新されてないし、bashのがいいってまじ?
- 958 名前:名無しさん@お腹いっぱい。 [2012/04/30(月) 07:45:44.90 ]
- そろそろ5を出そうかというタイミングで何言ってるんだ?
- 959 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/04(金) 23:55:38.50 ]
- >>952
>>956 両方 _a _b a b になるじゃねーか。試しちまった。
- 960 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/05(土) 11:39:09.60 ]
- >>959
え? お前の環境変だろ。LC_ALL設定してしまってるとか。
- 961 名前:名無しさん@お腹いっぱい。 [2012/05/05(土) 12:00:08.94 ]
- en_US ロカールが定義されているか、未定義かで変わる?
- 962 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/05(土) 12:10:33.40 ]
- 各地域ロケールの内容ってどこかで決まってたりするの? 環境依存だと思ってた。
- 963 名前:名無しさん@お腹いっぱい。 [2012/05/05(土) 12:12:56.73 ]
- >>959 ではないけどやってみた。OSX Lion。
普段の環境は LC_ALL 未定義、LC_MESSAGES=C、LC_TIME=C、他のLC_xxxは未定義、LANG=ja_JP.UTF-8 $ LC_COLLATE=en_US.UTF-8 zsh -c 'echo ZSH_VERSION=$ZSH_VERSION LC_ALL=$LC_ALL LC_COLLATE=$LC_COLLATE; echo *' ZSH_VERSION=4.3.11 LC_ALL= LC_COLLATE=en_US.UTF-8 _a _b a b $ LC_COLLATE=C zsh -c 'echo ZSH_VERSION=$ZSH_VERSION LC_ALL=$LC_ALL LC_COLLATE=$LC_COLLATE; echo *' ZSH_VERSION=4.3.11 LC_ALL= LC_COLLATE=C _a _b a b
- 964 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/05(土) 12:21:42.24 ]
- 多分、en_US localeをインストールしてない環境ってオチ。それならLC_COLLATE=C と同じになって当然。
- 965 名前:963 [2012/05/05(土) 13:42:40.15 ]
- うちのzshはここ見てないのかねぇ。
$ ls -l /usr/share/locale/en_US.UTF-8/LC_COLLATE lrwxr-xr-x 1 root wheel 28 2011-08-02 23:22 /usr/share//locale/en_US.UTF-8/LC_COLLATE -> ../la_LN.US-ASCII/LC_COLLATE $ ls -l /usr/share/locale/la_LN.US-ASCII/LC_COLLATE -r--r--r-- 1 root wheel 2086 2011-08-02 23:22 /usr/share/locale/la_LN.US-ASCII/LC_COLLATE LNってどこだよw
- 966 名前:963 [2012/05/05(土) 13:52:07.08 ]
- $ strings =zsh | grep strcoll
少なくとも strcoll は呼んでないわー。 libiconvとかはリンクしてるけど。
- 967 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/05(土) 22:53:05.58 ]
- >>960
片方 a _a b _b になるじゃねーか。LC_ALL設定失念しちまった。 なにこれ _a を 1文字として扱ってるの? >>966 % echo $ZSH_VERSION 4.3.17 % strings =zsh | grep strcoll strcoll
- 968 名前:名無しさん@お腹いっぱい。 [2012/05/06(日) 04:10:16.92 ]
- >>967
configure 次第か。
- 969 名前:名無しさん@お腹いっぱい。 [2012/05/13(日) 00:17:40.31 ]
- 以下のように拡張子の前の数字を取り除きたいのですが、zmvでどのように実行をすれば良いでしょうか?
hoge1.mp3 → hoge.mp3 #数字を取り除く hoge1hoge.mp3 → hoge1hoge.mp3 #そのまま 試行錯誤したのですが、うまく行きません。 以下のように実行すると、"hoge1.mp3"と"hoge1hoge.mp3"を"hoge.mp3"に変換しようとして失敗します。 zmv -n '([a-z]*)[0-9]*.mp3' '$1.mp3' 以下のように実行すると".mp3"に変換しようとして失敗します。 zmv -n '^([a-z]*)[0-9]*.mp3$' '$1.mp3'
- 970 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/13(日) 00:22:52.56 ]
- >>>969
basename使うわけにはいかないの?
- 971 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/13(日) 02:07:28.60 ]
- いつも for で zmv 使ってないから知らんけど '(*)<->.mp3' じゃないか?
多分それ re じゃないよ。
- 972 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/13(日) 10:25:40.61 ]
- それだと
(hoge12)3.mp3 になるぜ
- 973 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/13(日) 12:02:16.55 ]
- 自分も普段は for 文を使っちゃうけど
zmv '(*)[0-9]##.mp3' '$1.mp3' とかでいいのかな。まあ便利なのかもw
- 974 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/13(日) 12:06:46.39 ]
- ああ>>972と同じになってしまうのか
zmv '(*).mp3' '${1%%[0-9]##}.mp3' かな?
- 975 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/13(日) 15:41:51.71 ]
- おお、たしかに。こうする必要があるか。 '(*[^[:digit:]])<->.mp3'
- 976 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/13(日) 16:34:24.13 ]
- そうか shortest match flag とかはないんだな。
うーん *(#c,)<-> で落ちる。こんなパターン使わないけど。
- 977 名前:969 mailto:sage [2012/05/13(日) 17:35:45.22 ]
- ありがとうございます。
>zmv '(*).mp3' '${1%%[0-9]##}.mp3' でうまく行きました。 これは$1のうちの%%と##で挟まれた正規表現を取り除くという書式なのでしょうか? >おお、たしかに。こうする必要があるか。 '(*[^[:digit:]])<->.mp3' <-->はどういう処理ですか? こちらは使いかたがよく分かりませんでした。 すみません。zmvのパラメータについて解説しているサイトはありませんか? zmvの書式が難しくて。
- 978 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/13(日) 18:03:15.98 ]
- man zshcontrib
- 979 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/13(日) 19:04:25.29 ]
- >>978
ありがとうございます。 man zmvで見つからない、とか思っていたので。
- 980 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/13(日) 21:42:08.02 ]
- >>977
man zshexpn すれば詳しいことが載っているが ${name%%pattern} と x## の組み合わせだよ 前者はシェルスクリプト一般でよく使われる <-> は <[x]-[y]> の特殊例で数字にマッチする
- 981 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/15(火) 01:08:56.08 ]
- >>980
ありがとうございます。 ようやく理解できました。
- 982 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/15(火) 19:43:39.12 ]
- man zshall しかうたないな
- 983 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/16(水) 01:24:52.01 ]
- >>982
俺もman zshall派 でもそうすると目当てのものみつけにくいんだよなw
- 984 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/16(水) 01:34:37.45 ]
- 使うのは zshall でも人に示すときは絞る
昔から言われてるけど zsh 関係のドキュメントは読み物としては面白くないな
- 985 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/16(水) 23:36:44.49 ]
- 言われてた気もするけど今思うに特別そうでもない
- 986 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/17(木) 12:33:01.23 ]
- うん。
|

|