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リンク
0717名無しさん@お腹いっぱい。
2007/04/10(火) 22:40:44では遠慮なくツッコメ。
0718名無しさん@お腹いっぱい。
2007/04/10(火) 23:55:450719名無しさん@お腹いっぱい。
2007/04/11(水) 02:25:440720名無しさん@お腹いっぱい。
2007/04/11(水) 07:12:17なんでやねん。欲嫁。
>>714 では、
$ ln -s /home/foo ~foo
と実行してるから、~fooという名前のsymlinkはできない。
~fooという名前のsymlinkを作るためには、
$ ln -s /home/foo '~foo'
のように、クォートするなり、./~foo みたいに ./を付けるなりしないといけないから。
0721名無しさん@お腹いっぱい。
2007/04/11(水) 07:14:15シンボリックリンクにrm -rやること自体はまずくない。(変ではあるが)
まずかったのは、それがシンボリックリンクではなかったこと。
0722名無しさん@お腹いっぱい。
2007/04/11(水) 08:37:49いや、シンボリックリンクに対して rm -r するのはおかしいよ。
-r オプションは「当該ファイルをディレクトリとみなして中身もいっしょに
消す」という意図のオプションだから、仮に rm で消せなかったとしてもシン
ボリックリンクだと認識しているファイルに使うのがまずヘン。
だって中身を消したかったわけじゃないでしょ。
0723名無しさん@お腹いっぱい。
2007/04/11(水) 09:45:48> として /bar/~foo を作ったのですが、
って言ってるんだから、
~foo っていうファイル名のファイル (シンボリックリンク) が
あったんじゃないの?
0724名無しさん@お腹いっぱい。
2007/04/11(水) 09:53:03そこは確かに曖昧だが、質問者の理解不足によるものだろう。
ln -s /home/foo ~foo
を実行してシンボリックリンクを作っている以上、
~fooは展開されて、実際のパス名になるから、
「~foo」なんて名前のシンボリックリンクができたわけではないことは明らか。
0725名無しさん@お腹いっぱい。
2007/04/11(水) 09:58:53(クォートとかで回避する方法も知らないだろうし)
0726名無しさん@お腹いっぱい。
2007/04/11(水) 10:30:52zsh とか以前に極めて悪趣味
> シンボリックリンクにrm -rやること自体はまずくない。(変ではあるが)
まあそうだけど "まずいかどうか" じゃなくて
「意味を理解せず(考えず)」に -r というのは銃殺刑確定
"(変ではあるが)" に集約されるけどな
0727699
2007/04/11(水) 23:44:00原因は、「~ユーザ名」と「~非ユーザ名」で挙動が異なる事を知らなかったという
私の理解不足にあります。
zshで
foo@example:/bar% sudo rm -r ~foo
でホームディレクトリが消えた後、 bash で
foo@example:/bar$ sudo ln -s /home/foo2 ~foo2
foo@example:/bar$ sudo rm -r ~foo2
(ここで、foo2 は既に存在しないユーザ名。/home/foo2 自体は実在する。)
として、検証してしまいました。
>>718, >>723-725
「/bar/~foo」は、ありました。
しかし、実際には>>720さんの説明の通りにしなければエラーになります。
したがって、作成時にはクォートしたと思います。
>>719, >>721-722
今後は、>>715さんの様にしたいと思います。
>>726
全くその通りです。
こんな unix の初歩的な事でスレを汚してしまい、
申し訳ないです。
0728名無しさん@お腹いっぱい。
2007/04/11(水) 23:51:24なるほどね。いや悪いってわけじゃないです。
ただ ~user という用法をしらない人がいると
誰も思わなかったから「ネタだろ」位に皆思ってただけで...
0729名無しさん@お腹いっぱい。
2007/04/12(木) 02:39:000730名無しさん@お腹いっぱい。
2007/04/13(金) 09:32:32シンボリックリンクをrm -rすると実際どうなるの?
0731名無しさん@お腹いっぱい。
2007/04/13(金) 09:34:23それくらい実験してみろよ。
そのシンボリックリンクだけが消えるだけだよ。
0732名無しさん@お腹いっぱい。
2007/04/13(金) 14:53:230733名無しさん@お腹いっぱい。
2007/04/13(金) 20:52:19001
002
003
となって2行目以降にスペースが入ってしまうのは
なんででしょうか?
0734名無しさん@お腹いっぱい。
2007/04/13(金) 20:57:260735名無しさん@お腹いっぱい。
2007/04/14(土) 02:35:54とすると余計な空白なしに出力するのに
最もシンプルな書き方はどうなるのでしょう
echo {001..005} | tr "[:space:]" "\n"
だとベストではないですよね
0736名無しさん@お腹いっぱい。
2007/04/14(土) 02:55:22for i in {001..005}; do echo $i; done
とか。zsh のことだから省略記法があるのかな。
0737名無しさん@お腹いっぱい。
2007/04/14(土) 02:58:560738名無しさん@お腹いっぱい。
2007/04/17(火) 22:38:460739名無しさん@お腹いっぱい。
2007/04/21(土) 00:26:430740名無しさん@お腹いっぱい。
2007/04/21(土) 05:16:08http://journal.mycom.co.jp/news/2007/04/20/023/index.html
0741名無しさん@お腹いっぱい。
2007/04/21(土) 08:01:490742名無しさん@お腹いっぱい。
2007/04/21(土) 09:03:22書いたあと一回でも読み返したとは思えん文だなw
0743名無しさん@お腹いっぱい。
2007/04/21(土) 10:58:42??メジャーリリース?
0744名無しさん@お腹いっぱい。
2007/04/21(土) 11:53:180745名無しさん@お腹いっぱい。
2007/04/22(日) 02:10:350746名無しさん@お腹いっぱい。
2007/04/22(日) 04:04:57原因が compinit する時にNFSで共有してる .zcompdump へのロックだったので
compinit -d /tmp/$USER.zcompdump
とかしたら幸せになれた
0747名無しさん@お腹いっぱい。
2007/04/27(金) 10:44:220748名無しさん@お腹いっぱい。
2007/05/06(日) 19:10:150749名無しさん@お腹いっぱい。
2007/05/06(日) 20:06:07c
d'
複数行の履歴を編集する時に改行のつもりで RET を打鍵すると accept-line
が呼ばれてしまうのだけど、これを回避する方法ってありますか?
0750名無しさん@お腹いっぱい。
2007/05/06(日) 20:11:17C=v C-j かな?
0751名無しさん@お腹いっぱい。
2007/05/07(月) 06:14:08できました。ありがとう
0752名無しさん@お腹いっぱい。
2007/05/09(水) 12:10:15http://journal.mycom.co.jp/column/zsh/index.html
0753名無しさん@お腹いっぱい。
2007/05/09(水) 13:01:300754名無しさん@お腹いっぱい。
2007/05/09(水) 13:17:140755名無しさん@お腹いっぱい。
2007/05/25(金) 03:27:080756名無しさん@お腹いっぱい。
2007/05/25(金) 04:26:49どうすればいいんでしょうか?
075787
2007/06/09(土) 00:33:14% tar xzvf zsh-4.3.4.tar.gz
% cd zsh-4.3.4
% ./Util/preconfig
% ./configure --enable-multibyte --enable-locale
% make
% sudo make install
どこに記述すればいいんだいよう
0758名無しさん@お腹いっぱい。
2007/06/14(木) 03:25:54行き過ぎたときに戻る方法ってありませんか?
shift+tabとか押してみたけどダメだった
0759名無しさん@お腹いっぱい。
2007/06/14(木) 03:28:360760名無しさん@お腹いっぱい。
2007/06/14(木) 03:40:28コマンド自体が一個前のに戻るだけでした
0761名無しさん@お腹いっぱい。
2007/06/14(木) 05:52:05# 補完候補を←↓↑→で選択。
zstyle ':completion:*:default' menu select true
で、矢印キーで移動するのはダメですか?
0762名無しさん@お腹いっぱい。
2007/06/14(木) 09:37:530763名無しさん@お腹いっぱい。
2007/06/14(木) 11:34:06C-/
0764名無しさん@お腹いっぱい。
2007/06/14(木) 15:27:19>>761
おぉ、そんな便利なこともできるんですね
>>762
>>763
できました
0765名無しさん@お腹いっぱい。
2007/06/14(木) 21:35:570766名無しさん@お腹いっぱい。
2007/06/14(木) 23:03:040767名無しさん@お腹いっぱい。
2007/06/15(金) 10:39:14気合いで尻の穴に吸い込め
0768名無しさん@お腹いっぱい。
2007/06/15(金) 12:23:070769名無しさん@お腹いっぱい。
2007/06/17(日) 12:07:51=(nannkano_command) の一時ファイルで物臭をやろうとすると
hogehoge==(nannkano_command) となって == の解釈でエラーに
なってしまう。エスケープしても別のエラーになる。うまくやる方法は
ないかな。
0770名無しさん@お腹いっぱい。
2007/06/17(日) 12:23:31http://pc11.2ch.net/test/read.cgi/unix/1181716111/27
できればこのキチガイをzshから出さないようにしてください。
迷惑です。
0771名無しさん@お腹いっぱい。
2007/06/17(日) 12:35:51$ hogehoge='=(nannkano_command)'
$ echo "$hogehoge"
=(nannkano_command)
↑ってできるけど、これじゃ駄目なの?
0772名無しさん@お腹いっぱい。
2007/06/17(日) 12:57:390773名無しさん@お腹いっぱい。
2007/06/17(日) 13:03:22=(command) の一時ファイルはすぐ消えちゃうよ。かりに hogehoge=... に渡せても、それを再利用したときにはもう消えてると思うんだけど、どういう風に利用することを考えているの?
っていうか、やりたいのは `...` の方だったりしない?
あと、わたしの手元では
hogehoge==(command)
でも一時ファイル名はちゃんと取れるけどなあ。
0774名無しさん@お腹いっぱい。
2007/06/17(日) 13:33:25ファイルの要る部分だけを抜き出して渡したいんですよ。履歴に突っ込んでおいて
たまに呼び出したいぐらいの軽い用途です。
たしかに単独の変数代入だと自分ところでも動きますが、コマンド途中だとエラーに
なってしまいます。例えば、
$ echo hogehoge==(command)
zsh: not found
0775名無しさん@お腹いっぱい。
2007/06/17(日) 19:10:37どう設定したらいいですか?
0776名無しさん@お腹いっぱい。
2007/06/17(日) 19:19:04かな
0777名無しさん@お腹いっぱい。
2007/06/17(日) 19:29:19できました
ありがとうございます
bashから乗り換えたけど色々と便利ですね
0778名無しさん@お腹いっぱい。
2007/06/27(水) 03:40:21拡張子に応じたコマンドを自動実行
http://journal.mycom.co.jp/column/zsh/016/
0780名無しさん@お腹いっぱい。
2007/06/27(水) 13:56:370781名無しさん@お腹いっぱい。
2007/06/27(水) 14:50:24http://journal.mycom.co.jp/column/zsh/015/
0782名無しさん@お腹いっぱい。
2007/07/01(日) 21:04:02bindkey '^Q' push-line だとだめ、bindkey の出力にはちゃんとでてるのに
bindkey '^P' push-line だとできるが P は別で使ってるので...
bindkey -v の人スタックどうしてるんだろう?使ってないとか?
0783名無しさん@お腹いっぱい。
2007/07/03(火) 04:42:580784名無しさん@お腹いっぱい。
2007/07/03(火) 16:58:40screenのウィンドウ名にログイン先のホスト名が自動で付けれる ので最近zshに乗り換えたものです。
聞きたいのですが、
% history
1 less .zshrc
2 ls
3 man man
4 history
という履歴において先ず、l(小文字のLです)とタイプして ↑を押す時、
tcshの場合は 「history」 や 「man man」 を飛ばして ll(小文字のLです)から始まる 「ls」 を表示してくれますが
zshの場合は 「history」 と表示されます。
ネットで調べたら
autoload history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey "^P" history-beginning-search-backward-end
bindkey "^N" history-beginning-search-forward-end
と.zshrcに書いて Ctrl+P、Ctrl+Nでtcsh上の矢印を使った履歴検索が実現できました。
しかし、自分はやはり慣れた↑や↓を使いたいのですが どう書けばzshで実現できるのでしょうか?
どなたかご教授おねがいします。
0785名無しさん@お腹いっぱい。
2007/07/03(火) 18:48:300786名無しさん@お腹いっぱい。
2007/07/03(火) 18:48:48ついでに「ご教授」でもググってみることをすすめるとく
0787784
2007/07/03(火) 20:33:42そうなんです 結局矢印キーは
どういうコードで表わされるかを
聞きたかったんです。
意味不明な文ですみませんでした。
>>786
ありがとうございました。
"^[[A" "^[[B" で実現できました。
「ご教授」を「教えてください」の丁寧語の意味で使っていました。
こういう場合は「ご教示」なのですね。
失礼しました。
0788名無しさん@お腹いっぱい。
2007/07/03(火) 20:40:420789名無しさん@お腹いっぱい。
2007/07/03(火) 23:02:51> zshに乗り換えたものです。
自動で付けてくれるような機能あんだっけ?
0790784
2007/07/03(火) 23:27:25あっ 本当ですね
こんな機能、全く知りませんでした。
教えてくれてありがとうございました。
>>789
すみません、文章が不正確でした。
正しくは、.zshrcに
function ssh_screen(){
eval server=?${$#}
screen -t $server ssh "$@"
}
if [ x$TERM = xscreen ]; then
alias ssh=ssh_screen
fi
を記述したらできます。
ttp://d.hatena.ne.jp/naoya/20051223/1135351050
でも自分の環境は2行目の
eval server=?${$#}
で失敗するので、この2行目を
A=$#
eval server=$"$A"
としています。
0791名無しさん@お腹いっぱい。
2007/07/03(火) 23:41:57と聞いたこともある。
0792名無しさん@お腹いっぱい。
2007/07/04(水) 00:52:420793名無しさん@お腹いっぱい。
2007/07/04(水) 01:11:04これはリモートでコマンドを実行するんじゃなくて、リモートログインするという前提なのか?
それなら
function ssh_screen {
screen -t $@[-1] ssh "$@"
}
とかでいいんじゃないの。
0794784
2007/07/04(水) 02:12:45>これはリモートでコマンドを実行するんじゃなくて、リモートログインするという前提なのか?
そうです。
>function ssh_screen {
> screen -t $@[-1] ssh "$@"
>}
>とかでいいんじゃないの。
今まで動けばいいと思って、大して気にしていませんでした。
指摘されたこの機会に見直してみました。
自分はsshを使うとき
% ssh ホスト名 -l リモートのユーザー名
と使うので
function ssh_screen {
screen -t $1 ssh "$@"
}
としてみました。
0795名無しさん@お腹いっぱい。
2007/07/04(水) 08:46:05間違いではないが、
本来言いたいこととは意味がちょっと違う。
http://www.tt.rim.or.jp/~rudyard/torii009.html
0796名無しさん@お腹いっぱい。
2007/07/07(土) 00:11:03に「諸君、私はzshが好きだ」が張られているわけだが。
どうしてこのスレに書かないのか疑問だ。w
0797名無しさん@お腹いっぱい。
2007/07/07(土) 00:27:05「zsh! zsh! zsh!」
0798名無しさん@お腹いっぱい。
2007/07/09(月) 04:54:36ls *~two
とすると one three が表示されます
cd ..
ls number/*~two
だと one two three が全部表示されてしまって two が除外されないのですがなぜでしょうか?
つД`) タスケレ !!
0799名無しさん@お腹いっぱい。
2007/07/09(月) 07:31:370800名無しさん@お腹いっぱい。
2007/07/09(月) 09:49:080801名無しさん@お腹いっぱい。
2007/07/09(月) 15:09:44プロンプト(または%~)の長さが一定以上なら改行して次の行の先頭に
> を出すようにしたいと考えているのですが、
そういうことできますか?
長さによって次のうち適当な方になるようにしたい↓
通常:
~/どこそこ>
長いとき:
~/じゅげむじゅげむごこうのすりきれぱいぽぱいぽ
>
0802名無しさん@お腹いっぱい。
2007/07/09(月) 15:29:41PROMPT="%~%20(l.$LF.)> "
0803名無しさん@お腹いっぱい。
2007/07/10(火) 02:54:300804名無しさん@お腹いっぱい。
2007/07/10(火) 03:00:37PROMPT='%~%20(l,
,)> '
と書いてもいけました。
0805名無しさん@お腹いっぱい。
2007/07/10(火) 09:17:30zstyle -e ':completion:*:processes' command '
[[ "$oldcontext" = *sudo* ]] &&
reply=("ps -e") ||
reply=("ps -u $USER")
'
きもいので没リスト行き。
0807名無しさん@お腹いっぱい。
2007/07/28(土) 11:04:19parent_dir1/subdir/fuga.txt
parent_dir2/aho.txt
parent_dir2/aho2.txt
みたいな状態で子ディレクトリ(parent_dir1/subdir/ or parent_dir2/)単位に
処理をしたいとします。
for dir in *(/)
do
targetdir=$(echo ${dir}/*...) <= ここに$dirの下に子dirがあればソレ
以下いろいろ処理 なければ$dirを targetdirにセットしたい
done
*(/) にマッチしなければ . にマッチとか
何か条件マッチするglob みたいなことってできないんでしょうか?
0808名無しさん@お腹いっぱい。
2007/07/31(火) 15:38:01末端のディレクトリだけを対象にしたいということ?
findを使うのはダメですか?
find ./ -type d | while read dir
do
if [ -z $(find $dir -mindepth 1 -maxdepth 1 -type d) ]
then
# dirに対する処理
fi
done
0809名無しさん@お腹いっぱい。
2007/07/31(火) 16:09:27postorderで出力させて文字列マッチでいいんじゃない。これでどう?
dir0=
find -d topdir -type d | while read -r dir
do
case "$dir0" in
"$dir"/*) ;;
*) echo "$dir";; # dirに対する処理
esac
dir0="$dir"
done
findにファイル名中の改行を出力するとき\を前置するオプションが欲しい。
つまり-rなしのreadと対で使えるような。
0810名無しさん@お腹いっぱい。
2007/07/31(火) 16:53:45それをマッチさせるってことか。
>末端のディレクトリだけを対象にしたいということ?
そういうことだったんですが、
結局お目当てのファイルが当該ディレクトリにあるかどうかを
判別して処理みたいなことをしてしまいました
for dir in *(/)
do
subdir=''
for sd in ${dir}/**/*(#qN/) ${dir}
do
if [[ -e omeate-file-name ]]; then
subdir=$sd
break
fi
done
# subdir での処理
done
0811名無しさん@お腹いっぱい。
2007/08/09(木) 05:47:45^[k^[\ ( ^[ はエスケープ文字)をPROMPTの頭に追加したところ、
候補のリストがプロンプト行の下に複数行にわたって出てくるような補完を実行したり、
折り返しのある行の履歴をesc+kで戻って(vi modeです)編集したりするときに、
カーソルが4バイト分右にずれたり、一行上にずれたりよくわからない動作をするように
なってしまいました。
setopt no_always_last_prompt で、複数行の候補の出る補完をした際のずれは
なくなったんですが、コマンド履歴からの行編集はやはりカーソルが一行上や
4バイト右にずれます。
対処法ご存知の方いらっしゃいませんか。
0812811
2007/08/09(木) 05:49:05setopt no_always_last_prompt
setopt auto_cd
setopt auto_list
setopt auto_pushd
setopt no_auto_remove_slash
setopt no_extended_history
setopt glob_dots
setopt hist_ignore_all_dups
setopt hist_reduce_blanks
setopt hist_save_no_dups
setopt no_hup
if [ ! "$STY" -o "$WINDOW" = 0 ]; then
setopt ignore_eof
fi
setopt inc_append_history
setopt no_list_beep
setopt no_prompt_cr
setopt prompt_subst
setopt pushd_ignore_dups
setopt rm_star_silent
setopt no_share_history
if [ "$STY" ]; then
PROMPT='^[k^[\%{$prompt_color%}[%n@%m:%d]%#%{$reset_color%} '
else
PROMPT='%{$prompt_color%}[%n@%m:%d]%#%{$reset_color%} '
fi
色つける部分とってみても結果は同じでした。
0813名無しさん@お腹いっぱい。
2007/08/09(木) 06:24:11812の中に答あるじゃん。
0814811
2007/08/11(土) 13:01:420815名無しさん@お腹いっぱい。
2007/08/12(日) 02:33:12自分の欲しい答じゃないと逆ギレするくらいなら最初からこんなとこで質問するなよ。
0816名無しさん@お腹いっぱい。
2007/08/12(日) 02:47:46■ このスレッドは過去ログ倉庫に格納されています