zsh その7
$=a でだめな理由が? zsh 以外でも動くようにとか? まあ >>179 でいいと思うけど。 >>178 分割してほしくないとき。そういうことはきいてない? 簡単な例だと % ls -1 a b b c % for i in *; ls $i とか。当然 shwordsplit でも "$i" と書けばいい。言うまでもないか。 それがいちいち面倒、というかどんなデータがくるか判らなかったり、 多くのファイルがあって全ファイル名を把握してないときに space がきてもいいようにとりあえず "$i" って書くなら 最初からそれがデフォルトの方が助かる。 分けたきゃ >>179 みたいにも書けるしね。 単なる文字列として変数に入れてるのに たまたま space が入ってると意図しない分割になるんが厄介。 ものによるけど、指定したときだけそう動いてくれればいい。特に使い捨てではないスクリプトでは。 なんか書いてたら長くなった。失礼。 space含む場合は確かに便利かも。自分の場合はまずないので それじゃあbashと同じでいいやって感じかな。まぁ好みの問題か space含む場合に便利ってより、逆だとspace含む場合にわずらわしいって感じかな。 for ((count = 0.0; count < 1.0; count += 0.05)) do echo $count done これの出力結果は、 0.0000000000 0.0500000000 0.1000000000 ... といった感じになります。 出力の桁数の調整はどうしたらできるでしょうか??? なるほど。これは便利 % printf '%.2f\n' 0.3333333333 0.33 >>187 知らんかったからman引いてみた zshall で見つからんかったけど、man bash に載ってた > The current set of options may be found in $-. 一応試してみると % echo $- 05689JNXZghiklms % setopt +0 % echo $- 5689JNXZghiklms になるから、bash と同じように扱われてるっぽい >>188 ありがとう 自分もzshall見たのですが記載がないぽいんですよね 載ってるやん - <S> Flags supplied to the shell on invocation or by the set or setopt commands. zshallを見ると、自分はzshの全機能の1割も使ってないかもなぁ、と思えてくる それでいいのだ (ごみの山の中に一片の価値のあるものを見つけられたならそれは幸せである) うむ zshに限らないけど、何年たっても「こういう機能があったんだ!」て気付くのが楽しいね $(builtin foo) って command bar くらいのコストかかんだね。 同じ桁くらいの。 まあそれはそうか。 (builtin foo) みたいに subshell 内みたいだし。 でも $(<foo) みたいに速いといいよなあ。 普通気にしないだろうけど。 ビルドに挑戦したんだけど、zsh.mdhが作られなくて失敗する。 で、いろいろ試して、 export GREP_OPTIONS='--color=auto --binary-files=without-match -Hn' が原因。ファル名と行番号は常に表示したいから設定してたんだけどなぁ。 出力の形式を変更しちゃうようなのをデフォルト設定するのはどうかと。 grepはシェルスクリプトなどでも使われるわけだし。 そういう設定はシェルのエイリアスとかを使うのがいいんじゃない。 なぜだろう、alias ではなく環境変数を使いたい そういやgrepyのオプションは色々トラブルの元になると聞くね 自分もエイリアスにしてるわ 結局aliasに戻したんだけど、GNU grep検出した時点で、configureが GREP_OPTIONSをクリアしてくれても良い気はするの。 ママは死んだ。もういない。あのときパパに alias をみられなければ… locateを使ったファイル名補完ってできますか? $ vi http<キー> でlocate httpの結果を補完候補にしてくれるような。 できれば通常の補完とは使い分けたいので、別のキーに割り当てられるといいんですが。 >>206 zshに死角なし…あとはよろしく man zshcompwid の COMPLETION MATCHING CONTROL を理解すればなんとかなりそう zle -C loc menu-expand-or-complete _loc bindkey '^X^X' loc _loc() { files=($(locate $words[2])) # ここのパターンの指定をどうにかすればいけそう compadd -M 'e:.=**' $files } anchorという意味がよくわからないけど、こんな感じにしたら動いているようです。 _loc() { local wd=$words[-1] if [ "$wd" = "" ]; then return 0 fi files=($(locate $wd | grep ".*${wd}[^/]*$")) compadd -M 'l:||.=**' -- $files } ちなみに、これを思いついたのはEverythingが便利すぎるからなんですが、 http://www.voidtools.com/ unixコマンドラインで同じようなのってないんでしょうか。 cursesでlocateをインクリメンタルサーチするとか… でもやっぱりできるならシェルでやるのが一番便利でしょうね。 >>208 r:とかl:とか色々でてきてあきらめた…でも動いたようで良かったですな。 そういうツールは聞いたことないけど、UNIX的思想からいくとlocateの結果をgrepでフィルタして…となりそう zshをログインシェルにして、boot直後にターミナルでログインするとき、プロンプトが出るまで30秒くらいかかる。compinitしてるのが原因と思われるが、皆さんどうですか? x86_64 Intel(R) Core(TM) i7 CPU 950 @ 3.07GHz GenuineIntel GNU/Linux メモリ12GB、HDD 1TB、Gentoo Linuxです。 そのスペックでcompinitに30秒はさすがにおかしいと思われ ATOMですらcompinitは一瞬だから他の原因だろう ターミナルって、コンソールじゃなくてターミナルってこと? zsh以外のシェルに戻したら早くなるの? すみませんが詳しい方のみ回答をお願いします すみませんが詳しい方は回答のみお願いします >>211 、>>212 そうですよね。 .zshrcのcompinitをコメントアウトすると早くなります。 他の原因なのかもしれませんが。 HDDの読み込みが遅いとかそういうのかもしれません。 .zcompdumpは毎回作り直しているわけではないようです。 >>213 コンソールです。すいません。zsh以外だと速いですね。 追記します。 結果から言うと、compinitでの遅延ではなかったようです。 zshrcを一行ずつコメントアウトしてリブートする(ブート後の初回起動時以外は問題がないためです) する方法を試しましたが、なぜか再現性が明らかではないのですが、PROMPTを操作する行の有無で 遅延があるか決定されるような印象でした。 一回起動し、速く起動したzshrcで試しにもう一度再起動すると今度は起動が遅かったりしたため、 完全に確定しているわけではありません。今後再調査してみます。 ただ、zshrcに何も記入しない状態では、起動は速いようでした。 また、zshrcの最後の行をecho "zshrc end"としてみると 比較的瞬時にzshrc endが表示され、その後30秒程度の遅延があるようでした。 よってzshrcロードの後に遅延が生じているようでした。 こちらに関してはいつか暇なときにzshrcのソースに当たりたいと思います。 ログインシェルをbashにすると、一瞬で起動しました。 .zshrcの後に読まれるのは/etc/zloginと.zloginしか無い ここで何か変な処理してるんじゃないの 非ログインシェルでzshを起動したときは? select ループの数字付けのフォーマットを変えられないのかな? 一桁で済むときはいいけど、そうじゃないときはズレるのがどうも気になる >>217 レスが遅れ申し訳ないです。 そう思うんですが、システムには~/.zloginも/etc/zloginも作成していません。これらのファイルはありません。 例えばログインシェルをbashにしてrebootして、bashが立ち上がってからコマンドでzshを立ち上げると 一瞬で起動しました。再現性がありました。 確かにログイン関係で遅延が発生しているっぽいのですが。 .zloginを作成していないことによる問題とは考えにくく(試してはいないのでわかりませんが)、やはりソースに当たる必要がありそうです。 どうもありがとうございました。 ログインシェルの場合、読み込み順はこうだよね /etc/zshenv $ZDOTDIR/.zshenv /etc/zprofile $ZDOTDIR/.zprofile /etc/zshrc $ZDOTDIR/.zshrc /zlogin $ZDOTDIR/.zlogin 結局再現性がないと問題特定するのは無理なんじゃ FreeBSDでHISTFILEが大きくなるとログアウトが遅くなるなあ。 FreeBSD 8.1-RELEASE-p12 zsh 4.3.11 (amd64-portbld-freebsd8.1) 930035バイト、約33000行で10秒くらいかかるようになってた。 Linuxではこんなになったことないんだが。 >>222 portsのオプションでMEMをoffにすると直ると思う >>216 まあ別にいいんだけど、PROMPT に問題がありそうならそれを貼れば? 大変長らく空いてすいません。 boot直後初回のコンソールログインが非常に時間がかかる件(基本30秒以上だった)ですが、 再現性がなく、何が原因なのか判断に困る状態でしたが、 おそらくハードディスクの不良であったという事が判明しました。 あの後、systemdが起動時に自動でboot後になぜかrebootするようになっていまい、 journalctlなどを見ても原因がはっきりとわからずハードウェア的なものを疑い、 ハードディスク載せ替えを行ったところ、一瞬でログインできるようになりました。 .zshrcなど、設定の問題ではなかったようです。 >>225 PROMPTに問題がありそうとは思っていませんでした。 PROMPTを設定する行為に問題がありそうと思っていました。 ちなみにPROMPTは PROMPT=$(print "%{\e[00;37m%}{%{\e[01;37m%}%n%{\e[m%}@%{\e[01;37m%}%m%{\e[00;37m%}} $%{\e[m%} ")ですね。特に変哲ありません。 bashのときは!番号でhistoryの番号実行しようとすると,コマンドが表示されるまでで止まってもう一回エンターをおして実行になってたんですが, zshに乗り換えたら!番号でエンターをおしたらコマンド実行まで行ってしまいます. コマンド表示までで止めるのはどうすればよいでしょうか. tab 基本的にzshはtabで色々対応できる。補完とかその展開とか。 >227 わかんない時はとりあえず tab 押すだろ ここで聞くべきかTeXスレで聞くべきか迷ったんだけど, vim-latexで書いてるときに\llでコンパイルしますよね. bashだと\llでコンパイルし終わると自動的にvimの画面に戻るんですが,zshだとコンパイル終わってもvimにもどらずctrl cを押さないとvimにもどりません. どうしたらコンパイル終わって自動でvimに戻るかな >>232 そうですね。 でも諦めてlatexmk使うことにしたんでもう大丈夫になりました autoload -U compinit compinit が.zshrcに書いてあると読み込みの段階で固まっちゃうんですがこれはなぜでしょうか. この二行をコメントアウトすれば普通にとおります. 通常エラー出力と通常出力、それぞれを 別のパイプに通すことは可能? プロセス置換を使った方がてっとりばやい > >(command1) 2> >(command2) (( )) の中で浮動小数を代入した変数って、デフォルトは typeset -F なんですか? $ unset a $ (( a = 1.23456789e-8 )) $ typeset -p a typeset -F a=0.0000000123 $ unset a $ typeset -E a $ (( a = 1.23456789e-8 )) $ typeset -p a typeset -E a=1.234567890e-08 typeset -E をデフォにしたいのですが、できますか? zshのヒストリーが1万件になって削除されるようになってしまった。 みんなはzshのヒストリーの上限何万にしてる?(何百万?) >>239 function () { unset $x typeset -E $x } とかの要領で.zshrcに書き込むんじゃないか? そんなに保存しておくとエロいURLをwgetした履歴とかが いつまでも残っちゃうじゃん wget "URL" 形式で打ち込んでいるならば cat <<EOF >>.~/.zshrc setopt histignorespace alias cat=' wget' #空白を前方に差し込んで、ヒストリーログの書き込みをさせない ちょっとhistory絡みの質問していいですか? zshの状態から「bash」って打ってbashに切り替えると、何故かzshの履歴が 変な風に見えてしまうんですが、何でこうなるんですかね? こんな感じ↓ $ echo "current shell is zsh" $ bash $ echo "current shell is bash" $ hisotry 501231 : 1387372257:0;echo "current shell is zsh" 501232 : 1387372282:0;bash 501233 echo "current shell is bash" もちろんzshとbashのhistoryはそれぞれ.zhistory、.bash_historyと分けています。 そういう hisotry コマンドがあるんじゃない? いやまあ、2つがリンクしてたりはしない? >>241 どゆこと? >>245 >>. と cat= で悩んじゃったじゃないか。 setopt hist_ignore_all_dups hist_save_nodups しても10kとかいくもん? 昔は HIST_IGNORE_ALL_DUPS や HIST_IGNORE_DUPS を有効にしていたけど いつ何をやったかを後で調べたいときには、ほぼ正味の履歴を残しておく方が都合良いと気付いて無効にした HIST_FIND_NO_DUPS を有効にしとけば、使い回しのときにも欝陶しくないし 言われてみると確かに しかし自分の履歴ってのはなんか気恥ずかしいものがあるな 数年前のトラブってる業務やったときの履歴を見て遠い目をしたりw >>241 自分も一瞬こんな書き方があるのかと思った 要は適当な関数作れってことよね? 履歴のインクリメンタルサーチって、複数のワードでマッチングすることってできますか? たとえば、Ctrl-r を history-incremental-search-backward にしてて、履歴が $ history -4 4283 echo hoge 4284 echo fuga 4285 echo HOGE 4286 echo FUGA という状態のとき、 echo hoge を取得しようと Ctrl-r e と押すと echo FUGA が出ますが、 そこから e を連打して echo hoge まで辿るのが面倒です。他に何かいい方法ないですか? 今までは history | grep -E "echo.*hoge" みたいにやってましたが、コレジャナイ感が酷くいてw e 連打というのがよくわからんけど 自分はパターンマッチが使える history-incremental-pattern-search-{backward,forward} を使ってる >>255 すいません、e 連打は Ctrl-r 連打の間違いです 履歴でglob使えるとは知らなんだ ありがとうございます! globあると遡ってパターンマッチしまくるからタイポしたときとか重くなるね そういう意味でもHISTSIZEはでかすぎないほうがいいかも 履歴を古いやつから自動的に分けたりアーカイブしたりする機能がzshにあればいいけど そんくらい自分で適当に作れってか zsh-5.0.2 から zsh-5.0.4 に上げたら appendhistory で $HISTFILE に elapsed times が残るようになってるじゃないか。 よかよか。追加タイミング変わったんだね。実行完了時に。 Releases 5.0.3 and 5.0.4 were replaced with 5.0.5 because they contained serious bugs. ファッ!? =(command)で生成される一時ファイルに拡張子って指定できないもんですかね? それは俺も考えたことがある。無理じゃないすかね。少なくともそれ用の機能はないと思う。 >>259 serious bugs って何だろうね。 あんま盲目的に新バージョンを入れないほうがいいんかな 正規表現処理にバグがあってファイル消えたとかなったら死ぬわw >>261 rvmのバグ報告でなんかregexp周りが死ぬってのを見た気がする。 4.3.10でこういうバグがあったよ しかもDebianの前のバージョンのzshがこれだったという… ttp://www.zsh.org/mla/workers/2010/threads.html#00781 Debianのstableは、バージョン番号据置きでパッチのバックポートするから要確認。 標準エラー出力に色をつけたいのですがどうしたらよいですか? 標準エラー出力に色を付けてるプログラマーorシス管見つけたら 社史編纂室に異動させるわ シェルスクリプト総合 その22 http://toro.2ch.net/test/read.cgi/unix/1383260330/ 115+2 :名無しさん@お腹いっぱい。 [↓] :2014/01/11(土) 19:21:56.73 read に -N オプション付けてるプログラマーorシス管見つけたら 社史編纂室に異動させるわ 僕はcygwinでzshを使ってるだけで、unixなんて見た事も使った事も無いんで このスレでは大人しくしています >>265 Debianよく知らんのだけど、それでstable名乗るのってOKなん? >>272 バージョンあげてあらたなバグを導入することを防ぎつつ バグフィクスのみをとりこんでいくんだからstableなんじゃないの >>263 5.0.5でも補完の時にregexpでエラー吐いちゃうんだけど@とあるBSD >>273 ,274 ごめん、ダメじゃないです・・・勘違いした むしろバグフィックスやってくれないと困るわな こんな機能あったら便利なのになぁ、って話はメーリングリストに投げたら 意外にサクッと実装してくれたりすんのかな?経験ある人います? read.cgi ver 07.5.0 2024/04/24 Walang Kapalit ★ | Donguri System Team 5ちゃんねる