X



zsh その7
0001名無しさん@お腹いっぱい。
垢版 |
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/
0048名無しさん@お腹いっぱい。
垢版 |
2012/07/28(土) 03:21:52.56
5のリリースメールから引用

> Version 5.0.0 of zsh is the new stable release. There are many changes
> since the last stable release series, 4.2, イカリャク
0049名無しさん@お腹いっぱい。
垢版 |
2012/07/28(土) 12:32:34.28
Debianでは4.3系を長らく使ってるから開発版って認識は薄かったなぁ
(zsh-betaってのもあるのにzshの方が4.3.10)
0050名無しさん@お腹いっぱい。
垢版 |
2012/07/28(土) 12:52:30.74
macportsも、よくわかってないヒトがメンテしてるのかな。

zsh @4.2.7 (shells)
zsh-devel @5.0.0 (shells)
0051名無しさん@お腹いっぱい。
垢版 |
2012/07/28(土) 13:55:20.23
パッケージのdevelとかbetaってのはソフトウェア自体の安定版/開発版だのとはまた別の基準でつけられるものでしょ
安定性重視のシステムで安定パッケージと認められるためにはそれなりのテストや議論を経てこれなら大丈夫って認められる必要があるんじゃね、しらんけど
0052名無しさん@お腹いっぱい。
垢版 |
2012/07/28(土) 14:24:13.58
hoge-develって、実行時には必要ないincludeファイルとかだけをまとめたパッケージだろ。
本体パッケージとバージョンは同じじゃないといけない、しらんけど
0053名無しさん@お腹いっぱい。
垢版 |
2012/07/28(土) 14:32:40.96
>>52
それredhatのRPM
0054名無しさん@お腹いっぱい。
垢版 |
2012/07/28(土) 14:39:12.82
5が出る直前は
zsh @4.2.7 (shells)
zsh-devel @4.3.17 (shellls)
だったね。
0057名無しさん@お腹いっぱい。
垢版 |
2012/07/30(月) 03:31:08.03
>>52
devel=正式以外含めた最新版だと思ってる人が多いとけど実際はその認識でも間違いはない感じ
名前通り開発する人が必要なものが追加されてる版、なのでバージョンも含めていろいろ試せるように最新なのが普通

商業用だったりディストリ毎のルールとかもあるから一概にはいえないけど
0059名無しさん@お腹いっぱい。
垢版 |
2012/08/05(日) 00:53:22.29
zshって、コマンド内にコメント含められないの?bashだとできるのに。
ls -al#a
みたいな。
0060名無しさん@お腹いっぱい。
垢版 |
2012/08/05(日) 01:36:11.72
setopt interactive_comments
対話環境(スクリプトではない、プロンプトが出る環境)でコメントを機能させる
006159
垢版 |
2012/08/05(日) 02:18:34.27
おお、そんなオプションが。ありがとうございます
0066名無しさん@お腹いっぱい。
垢版 |
2012/08/20(月) 18:07:07.61
非インタラクティブシェルとして起動するとき、aliasなどの設定ファイルを
読み込ませたいのですが、どうすればいいでしょうか?
0068名無しさん@お腹いっぱい。
垢版 |
2012/09/24(月) 16:20:06.91
$HISTFILEを手動で編集した後
fc -Rしても変更が反映されない(削除した行がbck-i-searchに候補として出てくる)んだけど
どうして?
0070名無しさん@お腹いっぱい。
垢版 |
2012/11/18(日) 16:28:40.94
.zsh_history に日本語含んだコマンドは正常に保存されないの?
そういうコマンドも履歴検索したいんだが.
0072名無しさん@お腹いっぱい。
垢版 |
2012/11/18(日) 17:54:23.99
>>71
うそ,まじで.自分の手元では
Windows7 64bit, zsh 4.3.12 (i686-pc-cygwin)
Ubuntu12.04, zsh 4.3.17 (i686-pc-linux-gnu)
のどちらでも無理だ.
echo ほげ

echo ほぃ?
みたいに .zsh_history に保存される.マルチバイトを考慮してない感じがする.
0073名無しさん@お腹いっぱい。
垢版 |
2012/11/18(日) 18:42:48.03
>>72
MacOSX 10.7.5 zsh 5.0.0 (MacPortsからのインストール)

lessやtailでみると echo ほぃ? になってるけど
historyで確認すると echo ほげ となっているので,
C-rではちゃんと下になるな
0074名無しさん@お腹いっぱい。
垢版 |
2012/11/18(日) 20:18:46.93
>>72
Arch Linux (uname -r は 3.6.6-1-ARCH) zsh 5.0.0-3だけど,
>>73と同じく,lessでみるとecho ほぃ<B2>ぃ<A7>ってなってるけど,
historyやC-p, M-pではちゃんと
echo ほげぇ
ってなってるよ.
0075名無しさん@お腹いっぱい。
垢版 |
2012/11/18(日) 20:36:46.76
>>73
zsh 4.3 でも history コマンドなら日本語表示できるわ.

zsh のバージョンを zsh-5.0.0 を試してみたら
73 と同じように C-r で日本語でも大丈夫だった.

理想的には .zsh_history 自体にきちんと保存して欲しいけど.
0076名無しさん@お腹いっぱい。
垢版 |
2012/11/23(金) 01:34:55.51
おー、文字によって化けたり化けなかったりするんだねー。
まあ内部形式なのかもしれないし、これで正しいのかも。少し無理があるか。
0077名無しさん@お腹いっぱい。
垢版 |
2012/12/03(月) 01:31:10.17
.zsh_history は、0x80-0x9f の符号が現れると
0x83 をメタキャラクタとしてくっつける。
作者はこれを仕様と言ってるんで、ヒストリファイル
を使う場合は手動で除去するしかないね。。。
(またはソースコードでこの部分をコメントアウトして
コンパイルするか…)
007873
垢版 |
2012/12/03(月) 11:39:00.77
>>77
内部で設定されているエンコードかと思って
変換できないか確認してダメだったけど
そういうことだったのね
0080名無しさん@お腹いっぱい。
垢版 |
2012/12/10(月) 20:38:45.04
算術演算をする (( )) ですが、中でプロセス置換 `` や $() を使うと挙動に違いが出ます。

$ cat hoge
0]1
$ (( i = `cat hoge | cut -d] -f2` ))
zsh: command not found: i
$ (( i = $(cat hoge | cut -d] -f2) ))
$ echo $i
1

zshでは``と$()は同一なものではないのですか?bashだと両者は同じになるのようですが。
0081名無しさん@お腹いっぱい。
垢版 |
2012/12/10(月) 21:11:51.31
>>80
知らんかったけど、backquoteじゃなくて、$() 使った方がいいよ、って言うてはるね
backquoteはネストできん。などなど…
ttp://zsh.sourceforge.net/Guide/zshguide05.html#l117
0082名無しさん@お腹いっぱい。
垢版 |
2012/12/11(火) 00:22:27.86
$() 使った方がいいと思うけど、それは別として↓の結果を見ると
bash は ((...)) をとにかく arithmetic evaluation として解釈して、
zsh は arithmetic evaluation として解釈できるときだけしてるように見えるね。

% bash -c '(( echo [ ))'
bash: ((: echo [ : syntax error: invalid arithmetic operator (error token is "[ ")
% zsh -c '(( echo [ ))'
[

`...` の中にあるんだから解釈できるとは思うけど置換前に判別してるのかね。
man には More precisely, `((...))' is equivalent to `let "..."'. ってあるしバグなんじゃない?
008380
垢版 |
2012/12/13(木) 08:46:32.66
>>80,81
ありがとうございます。
不思議なのが、[ と ] 以外の記号だと大丈夫なんですよね。
これはバグと思ったほうがいいかもですね。
0084名無しさん@お腹いっぱい。
垢版 |
2012/12/14(金) 00:51:33.91
% zsh -c '(( `echo "["|echo 1` ))'
zsh:1: command not found: 1
% zsh -c '(( `echo "[]"|echo 1` ))'
% zsh -c '(( `echo "("|echo 1` ))'
zsh:1: command not found: 1
% zsh -c '(( `echo "()"|echo 1` ))'

って感じで ( でも出るよ。
括弧の対応がとれてないとなるのかもね。多分それだけじゃないけど。
バグなら法則性を求めてもあんまりしかたない気はするけど。
0089名無しさん@お腹いっぱい。
垢版 |
2012/12/17(月) 16:30:14.11
zsh-5.0.0(4.3系でも一緒でした)で補完候補に日本語ファイルがある場合、 文字化けするんじゃなくて$'\202'$'\240'.txt の様に文字コードで表示されて しまうのですが、原因に心当たりがある方いらっしゃいましたらご教示下さい。
0091名無しさん@お腹いっぱい。
垢版 |
2012/12/18(火) 08:38:57.41
レスありがとうございます、環境をもうちょっと詳しく書きますね。
Androidでmultibyte-enableなzshを動かすべく、arm-linux上でstaticに
ビルドし、正常動作するバイナリを作成しました。これをAndroidに持って
来ると一見普通に動いている様なんですが、補完候補の日本語がコード
表示されてしまうんです。原因何だと思いますか?
0093名無しさん@お腹いっぱい。
垢版 |
2012/12/28(金) 00:59:04.41
標準エラー出力のみをパイプに出力するには
$ command 2>&1 >/dev/null | command2
とすればいいようですが、これの仕組みが分かりません。
なんで 2>&1 としてるのに標準エラー出力は/dev/nullに行かないのですか?
0094名無しさん@お腹いっぱい。
垢版 |
2012/12/28(金) 07:34:36.52
>>93
何回目のFAQだよw

2>&amp;1を実行している時点で標準出力(パイプ)が標準エラー出力にコピーされる。
(以後、2はパイプを指す)
次に、>/dev/null で標準出力が/dev/nullに変更されるが、
これはすでに2にコピー済みの標準エラー出力には関係ない。
0098名無しさん@お腹いっぱい。
垢版 |
2012/12/28(金) 18:03:32.29
x="a b c"; for i in $x; do echo $i; done
ってやると、ash/bash だと、
a
b
c
って出ますが、zsh だと、
a b c
となってしまいます。
ash/bashと同じ動きをさせるにはどうすればいいでしょうか?
0101名無しさん@お腹いっぱい。
垢版 |
2012/12/28(金) 18:24:31.16
>>94
それだと標準エラー出力も/dev/nullに流れてしまうことになり、
説明になってません。

>>95
なるほど、バグだったのですか。
こういうバグは直せないですよね。直すと既存のスクリプトが動かなくなりますし。
0105名無しさん@お腹いっぱい。
垢版 |
2012/12/28(金) 18:44:57.11
記憶が朧げだが、昔シェルスクリプト入門を謳ってネットで配布されていたテキストでも
同じ間違いをやらかしてなかったか
0106名無しさん@お腹いっぱい。
垢版 |
2012/12/28(金) 21:07:49.29
おお、いつのまにか zsh 5.0.2 が。
数値記法の 1_000 ってそういえば ruby にそんなんあったな。すっかり忘れてたけど。
setopt 的でもあるのか。
010793
垢版 |
2012/12/29(土) 18:53:23.86
>>94
もしかして >/dev/null よりも | が先に解釈されるんですか?
というか一般的に、リダイレクトよりもパイプの解釈が優先されるのがシェルの仕様?
0108名無しさん@お腹いっぱい。
垢版 |
2012/12/29(土) 20:40:41.91
>>107
リダイレクトは左から順に処理されるだけ.

普通のコマンドは
1 => /dev/stdout
2 => /dev/stderr
だが,2>&1 は「2の出力先を1と同じにする」から
1 => /dev/stdout
2 => /dev/stdout (= 1)
になって,>/dev/null は「1の出力先を /dev/null」にするから
1 => /dev/null
2 => /dev/stdout
になる.

>/dev/null で 1 と 2 が同時に /dev/null となることはない.
パイプは /dev/stdout の出力が次のコマンドの /dev/stdin になるので,
この場合は標準エラー出力だけパイプされる.

ちなみに &> /dev/null とすると「1と2の出力先を(同時に) /dev/null にする」
ことができる.man bash で RIDIRECTION のところ読め.
0109108
垢版 |
2012/12/29(土) 21:23:21.25
書いてて思ったんだけど,
command1 2>&1 >/dev/null | command2
じゃなくて
command 2>/dev/stdout >/dev/null | command2
って書いても同じ意味だよね? 後者で書いたほうが
わかりやすいと思うんだけど,環境によっては動かなかったり
するのかな?
0110名無しさん@お腹いっぱい。
垢版 |
2012/12/29(土) 21:25:32.38
>>93 は dup2 を知らないとよく陥る勘違いですな
FAQ になるのもわかる

せっかく zsh を使ってるのだから
command1 >&- 2> >(command2)
とでもするのが良いのかもしれん
0111名無しさん@お腹いっぱい。
垢版 |
2012/12/29(土) 21:38:57.37
>>109
zsh のデフォルトの setopt multios な環境では意図通りには動かないね
setopt nomultios では大丈夫だけど

デフォルトの環境だと
command1 2>/dev/stdout >&- | command2
ときちんとクローズする必要があるんじゃないかな
0112名無しさん@お腹いっぱい。
垢版 |
2012/12/29(土) 22:23:27.12
>>111
うーむ,ほんとだ.複数リダイレクトできるのも便利なんだが.
bash でいけるならいいか.シェルスクリプトで zsh は使わないよね?

setopt multios の状態で,試しにクローズしてやってみたけど,

$ command1 2>/dev/stdout >&- | command2
command1: line n: write error: Bad file descripter

と怒られる.command1 の 1 を破棄しないといけないのかと思ったが

$ command1 2>/dev/stdout >/dev/null >&- | command2
command1: line n: write error: Bad file descripter

変わらず.

$ command1 2>/dev/stdout >&- >/dev/null | command2

にしたら意図通りエラーが無くなった.リダイレクトの順番で
挙動が変わるのがよくわからんけど,あまり深入りしないほうがいいかな.
011393
垢版 |
2012/12/30(日) 00:58:27.95
>>108
ありがとうございます。そっか、2>&1 を特別視してましたが
これも単なるリダイレクトなんですね。
0114名無しさん@お腹いっぱい。
垢版 |
2012/12/30(日) 16:32:16.44
>>112
代わって深入りしといたよ。
>/dev/null >&- だと最終的に close(1) されてるから無効だけど
>&- >/dev/null だと close(1) 後に open してるから有効になる。

>&- とか <> とかあんまり用途が思い付かなかったけど、
>&- には multios 下での用途があるのか。multios 下でも特殊なことをしなければ不要な気がするけど。
0115名無しさん@お腹いっぱい。
垢版 |
2012/12/30(日) 17:23:02.43
環境によって挙動に予想がつかないところがあるから、結局は
# 伝統的な方法
command1 2>&1 >/dev/null | command2
# プロセス置換を使う
command1 >/dev/null 2>>(command2)
あたりで落ち着くな
念を入れるなら /dev/null のかわりに >&- を使えばいいのか

昔から思ってるけど、リダイレクトの周りの空白の入れ方って悩ましいよね
ファイル記述子の場合は制限があるし
最近は空白を使わずに詰めて書くことが多いかな
0118名無しさん@お腹いっぱい。
垢版 |
2013/01/08(火) 22:50:20.01
配列の要素の最大・最小を返す機能てないですか?こんな感じで
$ a=(1 3 2)
$ echo $a[MAX]
3

さすがにないですかね?でもzshならやってくれそうな気も
0119名無しさん@お腹いっぱい。
垢版 |
2013/01/08(火) 23:30:46.18
変数で大小判定させて
より大きければ変数1をそれにする :MAX処理
より小さければ変数2をそれにする :min処理
というシェルスクリプトでいけそうだな。
0121同じ要領で最小つくればいい
垢版 |
2013/01/09(水) 01:11:52.84
できた。.zshrcに書いて0以上の整数値を因数にぶちこんで動作する
Max() {
x=$1
for i in $@
do
if test $x -lt $i ; then
^ x=$i
fi
done
echo $x
}

*********
動作の一例
*********
Max -10 -1
-1

Max -10 2 -1 1
2
0122名無しさん@お腹いっぱい。
垢版 |
2013/01/09(水) 02:23:48.76
>>120
ありがとうございます。(n)でnumericalソートを意味するんでしょうかね?
ただ、man zshparamを見てみたんですがソート云々のオプションはなさそうでした。
どの辺見ればいいですか?

>>121
いやそれは・・・
0125118
垢版 |
2013/01/09(水) 23:30:08.16
何度もすいません、配列絡みでもう1つ質問させてください。

zshの配列の要素数って上限ありますか?

$ test=({1..300000})
$ echo $test[270000]
zsh: subscript too big: 270000

bashだとちゃんと返してくれるのですが・・・。

$ for((i=1;i<300000;i++)) ; do test[$i]=$i ; done
$ echo ${test[270000]}
270000
0126名無しさん@お腹いっぱい。
垢版 |
2013/01/09(水) 23:49:41.44
>>125

やってみたけど、

$ test=({1..300000})
$ echo $test[270000]
270000
$ echo $ZSH_VERSION
5.0.0
$ uname -a
Darwin thyme.local 12.2.1 Darwin Kernel Version 12.2.1:
Thu Oct 18 16:32:48 PDT 2012;
root:xnu-2050.20.9~2/RELEASE_X86_64 x86_64 i386 MacBookAir5,2 Darwin
0127118
垢版 |
2013/01/10(木) 00:11:06.98
>>126
4.3.17だったのですが、5.0.2に上げたらあっさりできました・・・
やはりzshはこまめにアップデートしたほうがいいですね。
どうもありがとうございました。
0128名無しさん@お腹いっぱい。
垢版 |
2013/01/10(木) 04:29:38.47
これか
> The arbitrary limit on parameter subscripts (262144) has been removed. As it was not
> configurable and tested in an inconvenient place it was deemed preferable to remove it completely.
> The limit was originally introduced to prevent accidental creation of a large parameter array
> by typos that generated assignments along the lines of "12345678=0". The general advice is not to do that.
0129名無しさん@お腹いっぱい。
垢版 |
2013/01/10(木) 10:41:43.81
  ★★★チベットの独立は日本の核心的利益である★★★
  http://jbbs.livedoor.jp/bbs/read.cgi/study/3729/1226114724/78

  ¥¥¥¥¥¥¥『万有サロン』書き込み大賞・総額100万円¥¥¥¥¥¥¥¥¥¥¥¥

  この掲示板に優秀な書き込みをして、総額100万円の賞金をゲットしよう!(*^^)v
    万有サロン
      http://jbbs.livedoor.jp/study/3729/
    書き込み大賞の詳細
      http://jbbs.livedoor.jp/bbs/read.cgi/study/3729/1069922074/78-
    書き込み大賞の詳細(資料倉庫内)
      http://www2.tba.t-com.ne.jp/a-z/omake/banyu/taisho.htm

  また、あらゆる疑問に関する質問を、携帯電話やメールでも受け付けています。
    電話番号 080-4437-4187
    メール  aaa-zzz@tba.t-com.ne.jp

  ¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
0131名無しさん@お腹いっぱい。
垢版 |
2013/01/30(水) 00:38:13.63
>>130
そのコード/bin/shだとokみたいやけど、zshやとエラーなるね
ary=(x y z); export ary ってやらないとダメっぽい
あと、typesetでごにょごにょやってもいけるみたいやけど、どっちにしても1ステートメントでは無理なのかも
0132名無しさん@お腹いっぱい。
垢版 |
2013/01/30(水) 03:06:16.11
>>131
うーむary=(x y z); export aryでエラーは出ないんだけど、子プロには届いてないっぽい
shも同じだわ
配列ってそういうもんだったっけ?
0135名無しさん@お腹いっぱい。
垢版 |
2013/01/31(木) 08:42:34.96
そもそもどういう経緯で「配列を環境変数に使える」って思い込みができたんだろう
PATHだって:でくっつけた文字列でしょ?
0136名無しさん@お腹いっぱい。
垢版 |
2013/01/31(木) 15:55:45.30
環境変数という概念が介在していないように見える。
シェル変数をプロセス間で持ち回るにはexport、ぐらいの認識なんじゃね?
0137130
垢版 |
2013/02/01(金) 00:22:47.76
>>135
そんなに変な発想かな?できたらできたで便利だと思うんだけど
実装されていないのは、オーバーヘッドがでかいから? or それとも単に需要がない?

>>136
その程度の認識です、自分あんま詳しくないもんで
つか、正しくは「プロセス間で持ち回る」じゃなくて「子プロセスに渡す」だよね
0138名無しさん@お腹いっぱい。
垢版 |
2013/02/01(金) 00:28:42.05
ちょっと実験してみたのですが

$ zsh --version
zsh 5.0.2 (x86_64-redhat-linux-gnu)
$ typeset -ix i
$ i=1
$ typeset -ax a
$ a=(a b)
$ typeset +m i
integer exported i
$ typeset +m a
array exported a
$ cat file
typeset +m i
echo "i="$i
typeset +m a
echo "a="$a
$ zsh file
exported i
i=1
a=

結局、typeset -xすると、-iや-aなどの他の属性が消されてしまうということかな
関数のexportもできたら便利だと思ったけど、関数はtypest -fによる属性だからこれも無理かな
0139名無しさん@お腹いっぱい。
垢版 |
2013/02/02(土) 10:49:55.09
環境変数はシェル変数ではないから基本的には用途違い(ともいいきれないか)だけど、
子シェルに配列変数を渡したいってことかな。それも環境変数的に。

export ENV="$(typeset -p i a)"
zsh -c 'eval $ENV; ...'

とかはしたくないってことなんだよね。
typeset -xT FOO foo が近いかな。これも子シェルで typeset しないとだめだから大差ないか。
ついでに separator と同じ文字が使えないし。

typeset -xT FOO foo
foo=(a b)
zsh -c 'typeset -xT FOO foo; ...'

どこで使うのかしらないけど↑の ENV みたいなんを .zsh* でなんかすれば
なんとかなんじゃない?
どーしてもやりたければ。
0140130
垢版 |
2013/02/05(火) 02:08:57.36
>>139
例示thx。そのやり方はさすがに面倒なんで諦めます

以前ならawkとかperlとかpythonでやってたような数値演算込みのスクリプト処理を
最近は何でもかんでもzshでやろうとする癖が・・・
0141名無しさん@お腹いっぱい。
垢版 |
2013/02/21(木) 03:45:07.04
関数の中身を履歴に加えることってできませんか?たとえば

$ hoge(){
echo fuga
}
$ hoge
fuga
$ history
  1 hoge(){\necho fuga\n}
  2 hoge

となりますが、こんなふうに関数の中で実行したものも履歴に残って欲しいんです。

$ history
  1 hoge(){\necho fuga\n}
  2 hoge
  3 echo fuga
0144141
垢版 |
2013/02/23(土) 03:41:02.81
>>142
例えばあるファイルをサーチして開く、という自作の関数を実行した後
そのファイルをまた開きたい場合、履歴に入ってればCtrl+Pですぐ呼べますよね。
全関数はもちろんありえないですが、関数の任意の部分をコマンドなりディレクティブなりで
設定してそういうことができたりしないかなと思いまして。

>>143
プロファイラって言うんですかねこういうの?
0145141
垢版 |
2013/02/23(土) 04:51:43.04
すみません、単に print -s でいけました。失礼しました。
0146名無しさん@お腹いっぱい。
垢版 |
2013/03/04(月) 00:37:19.72
echo | cd すると (pwd now: ~) って出るけどこれ何のための仕様かな
別に入力で何か変わるわけじゃないようだけど
レスを投稿する


ニューススポーツなんでも実況