zsh その7

1名無しさん@お腹いっぱい。
垢版 |
2012/05/24(木) 16:34:43.03
zshについて語るスレ

http://www.zsh.org/
http://zsh.sourceforge.net/

・過去ログ
zsh その6
http://toro.2ch.net/test/read.cgi/unix/1229010860/
zsh その5
http://pc11.2ch.net/test/read.cgi/unix/1212677877/
zsh その4
http://pc11.2ch.net/test/read.cgi/unix/1107342206/
zsh その3
http://pc5.2ch.net/test/read.cgi/unix/1080002786/
zsh入門 パート2
http://pc3.2ch.net/test/read.cgi/unix/1036324177/
zsh入門
http://pc.2ch.net/test/read.cgi/unix/990283346/
266名無しさん@お腹いっぱい。
垢版 |
2014/01/11(土) 20:08:23.27
標準エラー出力に色をつけたいのですがどうしたらよいですか?
2014/01/11(土) 20:13:28.22
標準エラー出力に色を付けてるプログラマーorシス管見つけたら
社史編纂室に異動させるわ
2014/01/11(土) 20:52:53.94
シェルスクリプト総合 その22
http://toro.2ch.net/test/read.cgi/unix/1383260330/

115+2 :名無しさん@お腹いっぱい。 [↓] :2014/01/11(土) 19:21:56.73
read に -N オプション付けてるプログラマーorシス管見つけたら
社史編纂室に異動させるわ
2014/01/11(土) 23:44:02.01
僕はcygwinでzshを使ってるだけで、unixなんて見た事も使った事も無いんで
このスレでは大人しくしています
2014/01/11(土) 23:57:49.03
じゃあ黙ってろよ
2014/01/12(日) 09:51:59.25
社史編纂室に異動させられて暇なんだろ
2014/01/14(火) 01:05:32.66
>>265
Debianよく知らんのだけど、それでstable名乗るのってOKなん?
2014/01/14(火) 04:14:06.74
>>272
バージョンあげてあらたなバグを導入することを防ぎつつ
バグフィクスのみをとりこんでいくんだからstableなんじゃないの
2014/01/14(火) 10:00:57.12
>>272
ダメなの?
2014/01/14(火) 20:49:51.24
>>263
5.0.5でも補完の時にregexpでエラー吐いちゃうんだけど@とあるBSD
2014/01/14(火) 20:58:48.07
>>273,274
ごめん、ダメじゃないです・・・勘違いした
むしろバグフィックスやってくれないと困るわな
2014/01/17(金) 21:28:10.41
こんな機能あったら便利なのになぁ、って話はメーリングリストに投げたら
意外にサクッと実装してくれたりすんのかな?経験ある人います?
2014/01/19(日) 01:13:19.16
zshの起動が異常におそいがこりゃなんだ
2014/01/19(日) 15:51:33.24
>>278
特に感じないけど。どの辺で遅い?

>>277
Release Notesにあった5.0.5の新機能で FORCE_FLOAT って超便利なオプションがあるけど
これメーリスに投げてから1日足らずでレス来てるのな。
サクッとできることはサクッとやってくれそう。

http://www.zsh.org/mla/users/2013/msg00145.html
2014/01/21(火) 02:46:54.12
FORCE_FLOAT付けたら./configure --<タブ>が変なエラーになる・・・何なのこれ

$ ./configure --
(eval):local:1: not valid in this context: _a_1.1
_describe:102: not an identifier: _a_1.1
2014/01/23(木) 02:21:05.12
>>278
俺は個人的にzshrcがもっさりしてるので遅い。
一回ふきとばしてみたら?
282名無しさん@お腹いっぱい。
垢版 |
2014/01/23(木) 02:23:30.23
>>279
>>281
.zcompdumpを作るのに異常に時間がかかってる
283名無しさん@お腹いっぱい。
垢版 |
2014/01/23(木) 02:25:45.18
autoload -Uz compinit
compinit -u
をコメントアウトするとすぐ起動する.
ホームディレクトリをNFSにしてるからかなぁ?
2014/01/25(土) 23:51:28.86
>>282
http://my.opera.com/ymirlin/blog/2011/02/01/nfs-home-zsh

mkdir /tmp/hoge
chmod 700 /tmp/hoge
ln -s /tmp/hoge/.zcompdump $HOME
autoload -Uz compinit
compinit -u

というのはどうだろう
285名無しさん@お腹いっぱい。
垢版 |
2014/01/26(日) 14:23:47.95
sshからログインと同時に指定したシェルスクリプトを実行したいんだが
% ssh user@example "export INC='~/setup.zsh';zsh"
接続先の~/.zshrcには$INCが定義されてるならsource $INCするように書いてる

もっとシンプルに
% ssh user@example "~/setup.zsh"
setup.zsh実行後にzshを終了せず対話型になるみたいなことって出来ませんかね?
2014/01/26(日) 14:57:40.57
>>285
setup.zshの最後にexec zshして、
ssh -t user@example setup.zshしたら?
2014/01/26(日) 15:00:01.93
>>286
まあssh -tしわすれたときのために
[[ -t 0 ]] && exec zsh かな?
2014/01/26(日) 16:39:40.77
素早い返信ありがとうございます
exec zshだとsetup.zshで定義されるシェル変数や関数などが維持できないようです。。。

.zshrcに依存することにはなるが、.zshrcから適当なフラグを立てたうえでsource $INCすることでできました

% ssh user@example 'cat setup.zsh .zshrc'
#setup.zsh
if [ -z $FLAG ] ;then
export INC=setup.zsh
exec zsh
else
(省略)
fi

#.zshrc
if [ -n $INC ];then
export FLAG=true
source $INC
fi
% ssh -t user@example setup.zsh
2014/01/27(月) 11:13:04.30
>>288
ああ、シェル変数やらはそうだろうね。
だったらexpect使ったら?
#!/usr/bin/expect
spawn "zsh"
expect "%"{ send "source hoge.zsh\n" }
interact

でやりたいことはできそうだけど
2014/01/27(月) 19:46:41.87
>>289
おおおこれは便利だ
こっちでやってみます
291名無しさん@お腹いっぱい。
垢版 |
2014/01/31(金) 18:40:31.72
>>284
ありがとうございます!
やってみたら,なぜかマシンによってセキュリティチェックがあるのとないのがありますね.
2014/01/31(金) 20:53:22.37
>>291
もしかしたら/tmpが0777のマシンと1777のマシンじゃないか?
2014/01/31(金) 21:57:09.18
なんとなく言ってみるけどselinuxが悪さしてることってない?
294名無しさん@お腹いっぱい。
垢版 |
2014/02/01(土) 00:36:14.06
両方ともmacですわ
2014/02/01(土) 19:20:21.34
そういやmacはデフォルトのログインシェルがzshなんだっけ
296名無しさん@お腹いっぱい。
垢版 |
2014/02/02(日) 01:13:04.98
10.2 まで tcsh
10.3 からいまのところ bash
zsh は5.0.2が入ってるけど、デフォルトログインシェルにはなってない。
2014/02/02(日) 18:31:21.31
あ、そうなんだスマソ
デフォルトでインストールされてるってだけか
2014/02/10(月) 23:45:43.92
なんかCentOS4.5のzsh-4.2.0が.zshenvを読んでないっぽいんだけどなんで?

まあ管理権限ないから$HOMEにzsh-5.0.5入れたけど……
2014/02/11(火) 07:19:07.79
てか4.5とか古いなw
そっちに原因があったりして
2014/02/11(火) 10:56:49.31
CentOSの問題をここで聞かれてもな。
2014/02/12(水) 00:50:45.39
研究室の鯖なかなか更新してくれないんだよね。
CentOS固有の問題なのかな?
2014/02/12(水) 01:08:42.94
うん。
2014/02/12(水) 01:19:27.88
そっか。
2014/02/12(水) 04:23:39.09
zsh-4.2.0なんて何年前だろ
とりあえず新しいのを自分でビルドしてユーザ領域に置いてみたら?
2014/02/12(水) 12:07:28.81
もう入れたってさ。
2014/02/12(水) 22:01:25.39
あー書いてたかスマン

ってか話題ないな・・・
2014/02/15(土) 11:39:19.20
話題か。

>>258 の件で $HISTFILE に elapsed times が残るようになったのはいいんだけど、
実行中に別 zsh 起こしてその履歴使ったり history -D したりできなくなってしまった。(当然)
とりあえず放置してるけど。
これでもいいような、そうでもないような。

share_history は前のまま実行前に追加するみたい。(elapsed times が残らない。)
てか share_history って imported lines と local lines 分けてるんだね。
昔は違った気がするけど。
あと import タイミングが行編集終了時。最初、終了前に履歴辿って効いてないのかと思った。
2014/03/02(日) 22:23:24.05
zargs -r -- $HOME/.zshfunc/*(N:t) -- autoload
で.zshfunc以下に定義してある関数を全部読みこもうとしたんだけど、
関数内でこいつを呼びだすと動かなくて
ttyで呼びだすと動いてるっぽい。なんでだろう?
309名無しさん@お腹いっぱい。
垢版 |
2014/03/06(木) 06:57:36.21
CENTOS6.3でzshを立ち上げると、/bin/lsコマンドが
/bin/ls: fork failed: リソースが一時的に利用できません
といって動いてくれません。bashだと大丈夫。他のコマンドだと大丈夫。zshとlsでなんかもんだいあるんでしょうか?
310名無しさん@お腹いっぱい。
垢版 |
2014/03/06(木) 08:21:18.89
>>309の件、自己解決しました。
.zshrcの中に変なaliasを定義していたのが原因でした。
2014/03/08(土) 02:50:06.88
>>308 それ tty でも動いてないんじゃない? あと zargs の意味ない気がするけど、-r のために使っているとか?
2014/03/08(土) 03:00:16.92
>>311
そうそれ。
2014/03/08(土) 03:05:49.91
あれ、確かにttyでも動いてないっすね。なんで以前は動いたと思ったんだろう。
2014/03/08(土) 18:19:46.44
zargs が subshell内で eval してるっぽいから意味ないんだと思う。
-r が目的なら

() { (( $# )) && autoload $@ } $HOME/.zshfunc/*(N:t)

でいいんじゃないか? setopt次第で "$@" かな。
exit 1 だけどエラーメッセージ出ないからいいよね?
2014/03/09(日) 11:12:18.11
>>314
ほんとだ、()でかこってあった…

> () { (( $# )) && autoload $@ } $HOME/.zshfunc/*(N:t)

forで逃げてましたが使わせていただきます。ありがとうございます。
2014/03/09(日) 22:07:18.67
無名関数に引数を渡せるようになっていたとは知らんかった
317名無しさん@お腹いっぱい。
垢版 |
2014/03/22(土) 19:18:47.39
プロンプトに$LINENOを表示させてみようと思ったら上手く行かなかった、環境変数って読めない感じ?
2014/03/22(土) 19:28:17.45
うまくいかないのがよくわからないけど普通に1とか2が出力されたよ
どっかの設定がおかしいんじゃね
319名無しさん@お腹いっぱい。
垢版 |
2014/03/22(土) 19:51:45.22
>>317
${LINENO} じゃ?
2014/03/22(土) 20:41:45.84
>>319 は $LINENO と ${LINENO} が違うものだと思ってるのかよw
2014/03/22(土) 20:47:29.70
>>317はそうと知らずに$LINENOの後に続けてコロンとモディファイアになる文字を書いちゃったのかもね
そういう場合は>>319がいうように${LINENO}にすれば回避できる
2014/03/22(土) 20:54:22.74
${LINENO} とか中途半端な書き方せずに "$LINENO" と書くのがお勧め。
2014/03/22(土) 20:56:22.21
いや、

PS1=$LINENO とかやっても $LINENO の値が動的に変わるわけじゃないって話だろw
324391
垢版 |
2014/03/22(土) 21:03:44.02
ごめん。一般の変数の展開と勘違いした。
マニュアル読むと LINENO はスクリプトの中で使うだけみたいだな。

プロンプトの行番号の概念がはっきりしないんだけど、これはイメージどおり?

PS1="%h $"

%h, %!, ! だと履歴の番号になるみたい。
2014/03/22(土) 21:29:22.55
>>324
まあプロンプトにLINENOがあっても?だけど普通にログインシェルでも立ち上げてからの行数でるよ
2014/03/29(土) 14:28:58.64
cd -[TAB] で表示されるディレクトリスタックをいじることってできますか?
m〜n番目のエントリを削除、とかがしたいです
dirsコマンドにはそれらしい方法はなさそうでした
327名無しさん@お腹いっぱい。
垢版 |
2014/04/02(水) 01:47:32.48
現在の設定のままroot権限持つことって可能ですか?
$ZDOTDIRを〜〜、ではなく現在のシェルで設定した変数を保持したままで、ということです。
sudoすれば良いだろ、というのはなしでお願いします
328名無しさん@お腹いっぱい。
垢版 |
2014/04/02(水) 02:29:34.48
su -m は?
2014/04/06(日) 19:36:26.45
いつの間にかipの補完ができなくなった
ssh hoge@XXXのXXXが数字だと補完してくれない
みんなできてる?
2014/04/07(月) 23:00:57.97
IP補完なんてできるのか
て、試したらできなかったわ
2014/04/07(月) 23:46:43.44
>>329
できてるで
% ssh foo@10.5.5.<tab>
10.5.5.1 10.5.5.2 10.5.5.3 10.5.5.4

% zsh --version
zsh 5.0.5 (x86_64-apple-darwin13.0.0)

_ssh は zsh 付属のやつっぽい
332名無しさん@お腹いっぱい。
垢版 |
2014/04/07(月) 23:46:48.56
/etc/hosts に書いてあってもだめ?
2014/04/08(火) 01:23:23.75
>>329
_ssh ちょっと読んでみたけど
ip アドレスは、.ssh/config に書いてあるやつしか補完されないっぽいな…
2014/04/08(火) 17:27:02.17
function print_known_hosts (){
test -f /etc/hosts && sed -e 's/#.*//' /etc/hosts
test -f $HOME/.ssh/known_hosts && tr ',' ' ' <$HOME/.ssh/known_hosts | cut -d ' ' -f1 | sed -e '/^|1|/d;s/^\[\(.*\)\]:[0-9][0-9]*$/\1/'
test -f ~/.host.completion && cat ~/.host.completion
}
_cache_hosts=($(print_known_hosts | tr '[:blank:]' "\n" | sort -u))

ってやって.ssh/known_hostsに書いてあるやつは補完できるようにしてるわ
2014/04/08(火) 17:27:43.67
あ、上記はもちろん.ssh/known_hostsがハッシュされてると動きませんあしからず
2014/04/24(木) 02:08:29.31
zparseoptsを使ってオプション引数だけの入った配列を得る方法ってないですかね?
オプション自体を手動で取り除くしかないですか?
2014/05/24(土) 18:36:48.95
alias -g G='| grep'
alias -g H='| head'
alias -g T='| tail'
などのグローバルエイリアスをしてる人多いと思いますが、
特定のコマンドの後ろに付ける場合は無視するようにはできませんか?
2014/06/27(金) 11:50:13.57
普段lsに--group-directories-firstオプションをつけてるんですが
zshのglobをこれと同じソート順にしたいです
どうすればいいですかね
2014/07/02(水) 02:55:08.08
PROMPTの%(?,,)の構文の挙動がおかしくないですか?
試しに下記のようなコマンドを入力すると逆の結果を返しており、psvar[2]を見て判断しているように思えます。
precmd(){}
psvar=( '0' '1' )
PROMPT='%? %1(?,success,error) %# '
sh -c 'exit 1'
:

これはバグでしょうか。それとも僕が何か勘違いしているのでしょうか
zsh 5.0.5 (x86_64-unknown-linux-gnu)
2014/07/03(木) 12:05:59.89
>337
使ってる人いるんですか,global alias

alias 設定した文字(列)を引数に書いた瞬間に死亡する,
という挙動のリスクが大きくて,
たいしたことない利便性ではリスクに見合わない印象
341337
垢版 |
2014/07/03(木) 21:58:27.42
クッソ便利で使うのが当たり前だと思ってたけど自分だけかな?
確かに気をつかないといけないけどさ・・・
まぁだから>>337を書いたわけですが
2014/07/03(木) 22:54:56.85
たった6文字ぐらい手で打てよ
お前今にとんでもないトラブル起きるぞ
2014/07/04(金) 06:34:45.12
アンタ死ぬわよ
344名無しさん@お腹いっぱい。
垢版 |
2014/07/06(日) 15:43:10.17
% LD_LIBRARY_PATH=
だとファイルリストが補完できるかと思うんですが、同じことを
% env LD_LIBRARY_PATH=
でもできるようにするにはどんな設定すればいいですかね?

tab以外のキーに _complete_files をバインドして補完しても
complete-files: no matches found: LD_LIBRARY_PATH=*
とかなってしまいます。。。
2014/07/09(水) 07:30:40.92
編集子について質問させてください

fullpathをチルダ付きpathに変換したいのですがうまくいきません
$ echo '/Users/xxx/doc/aaa.txt' | read fn; echo ${fn:s/$HOME/~/}

ご教示お願い致しますm(_ _)m
2014/07/10(木) 06:37:32.63
>>345
すんません。自己解決しました

${fn/$HOME/'~'}

でした。
2014/07/13(日) 18:41:43.93
補完絡みで質問です。
パッケージインストール直後や、~/bin等にスクリプト入れた直後だと補完に候補が出てこない(source .zshrcすればok)。
bashだと、直ぐ補完に反映されてるので何かオプションがありそうですが教え下さい。
2014/07/13(日) 18:47:27.56
>>347
rehash
2014/07/13(日) 21:09:31.42
>>348
オプションでは無いんですかね。
都度打つのが面倒なんで、、、
皆あまり気にならない?

aliasにするか、cd辺りでrehashを自動化ってことなのかな。
2014/07/13(日) 23:00:30.29
空エンターでrehashするようにしてる
2014/07/14(月) 01:04:35.45
そんなコマンドあったのか、今までexec zshして丸ごと入れ替えてた
2014/07/14(月) 03:56:04.04
補完に反映なら
zstyle ':completion:*' rehash 1

zstyle ':completion:*:commands' rehash 1
に絞ってもいいかもしれんが
2014/07/14(月) 19:36:07.05
>>352
完璧っす、有難い。
2014/07/14(月) 21:56:39.50
なんでそんなにしょっちゅうrehashが必要なんだろ。
2014/07/18(金) 18:37:43.55
gitで管理してるディレクトリの時だけ、
プロンプトにmasterとかサブブランチの情報が欲しい

ググった奴コピペしたのは管理してないところでmasterになってて邪魔だった
2014/07/19(土) 01:11:13.77
もうちょっとググれ
2014/07/29(火) 03:21:40.66
管理外でmasterって出るってgitの出力使ってないじゃん
どこから出力得てるんだ
2014/08/01(金) 17:29:13.41
a=(1 2); b=(3 4 5); foo $a $b
みたいな感じで foo にリストを引数として渡す場合には foo はどう書けば良かろうか?
あ、a や b の要素数は可変で。
a と b を繋げたリストでよければ foo の中で c=($*) すればいいっぽいけど、別々に欲しい。
あれ local c=($*) したらエラーになるのはなんでだ?
2014/08/01(金) 22:13:56.69
変数名を渡して関数の中でevalする
2014/08/02(土) 05:21:24.46
>>358
自分も昔ハマったことがあるが、local では配列の宣言と同時には代入ができないみたい

359 が言うように変数名を渡す方法が最初に思い付くけどもっと良い方法があるのかな?

% a=(1 2); b=(3 4 5)
% foo() {local A B; A=(${(P)1}); B=(${(P)2}); echo "$1[2] -> $A[2], $2[2] -> $B[2]"}
% foo a b
a[2] -> 2, b[2] -> 4
2014/08/08(金) 16:09:44.11
なるほど、名前自体を見て処理すれば良いのか、勉強になりました。
ちなみに bash だと local で宣言と同時に代入ができるみたい。なぜだ。
2014/09/18(木) 03:16:09.91
{
for i in {1..10..2}
で1,3,5,・・・,9と { } 増分
2014/09/18(木) 06:00:27.66
あれ、途中で変なふうに書き込んでしまいました。すいません

{1..9..2}で、1,3,5,・・というふうに増分2で展開されますが、1,2,4,8,・・・というふうに
累乗的に増えていくようなものを表す方法ってありますか?
{1..9**2}みたいな感じで書けたら便利なんですが・・・さすがに無理ですか?
2014/09/18(木) 14:14:34.28
ない。forで使うならiを指数としてループの中で計算すればいいじゃん。
365363
垢版 |
2014/09/18(木) 21:33:59.91
やはりさすがにないですか。ありがとです

いずれはインクリメントを自由に設定できるようになることを期待
zshなら・・・zshならきっと
2014/09/18(木) 23:09:51.96
普通のプログラミング言語でもできなくね?と思ったが
リスト内包表記があるのならできるか・・・
レスを投稿する