タグ

ブックマーク / d.hatena.ne.jp/lurker (15)

  • 定期的にコマンドを実行しその出力の変化を監視する - 技術メモ帳

    以前に、watch コマンドという 指定されたコマンドを定期的に実行し、 フルスクリーンで表示してくれるコマンドがあるという事を書いた。 http://d.hatena.ne.jp/lurker/20060716/1153056030 実は、--differences とオプションを付加する事によって、 直前の出力結果との差分をハイライト表示してくれるらしい。 知らなかった。コレは便利だ。 正直 grep -o を知ったときぐらい感動した。 以下のように入力してみるとどうなるのかが わかっていただけると思う。 ちなみにこれは、1秒おきに、dateコマンドを実行するというもの。 $ watch -n 1 --differences date さらに、--differences=cumulative と付加すると 起動してからのすべての変更部分がハイライトされるようだ。 $ watch -n

    f99aq
    f99aq 2007/01/25
    watch -n 1 --differences
  • 技術メモ帳 - zsh/filesで引数の最大バイト数を回避する

    zshmodules の zsh/files を利用すると、 chgrp, chown, ln, mkdir, mv, rm, rmdir, sync といったコマンドが、 zsh組み込みの関数に置換えられる。 メリットとしては、 移植性が高くなる、 引数文字列の最大バイト数の制限を受けなくなる ということが挙げられるだろう。 このうち、特に僕が便利だなと思っているのが、 引数文字列の最大バイト数の制限を受けなくなるということだ。 簡単に説明すると、 通常、コマンドを実行するときに 引数文字列のバイト数が一定の値を越えると 以下のようにエラーを出して処理をしてくれない。 % mv ./* ../dir zsh: argument list too long: mv そして最悪な事にコレは、 グロブなどを展開した後の文字列のバイト数であるため、 zsh の extended_glob とは非

    f99aq
    f99aq 2007/01/14
  • zshのurl-quote-magicでURL文字列を自動エスケープ - 技術メモ帳

    URL文字列を自動的にエスケープしてくれる url-quote-magic が非常に "良さげ" である。 たぶん、http:// という文字列で始まる文字列を入力しようとしたときに適用される。 autoload -U url-quote-magic zle -N self-insert url-quote-magic ちょっと試しにやってみよう。 たとえば、以下のURLをコピーしておく。 http://www.google.co.jp/search?hl=ja&q=%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A 通常の状態でペーストしてみると、 案の定おかしな事になる。誰もが期待する結果だ。 john ~[12979]% echo http://www.google.co.jp/search?hl=ja&q=%E3%81%82%E3%81%84

    f99aq
    f99aq 2007/01/12
  • カーソル位置までをエスケープする - 技術メモ帳

    すごい便利なのを見つけてしまった。 これはいい。 ESC + " と入力する事で、 カーソル位置までをエスケープする事が出来るみたいだ。 たとえば、以下のように文字列を入力した状態で、 $ hello world hello の o の次の位置で ESC + " と入力すると $ 'hello' world とシングルクォートで囲ってくれる。 複数回入力する事で、 $ ''\''hello'\''' world どんどんエスケープしていく。 ESC + $ でこの逆を行う。 $ 'test test' $ test test

    f99aq
    f99aq 2006/12/21
    M-' でクオート. M-$ で逆
  • 技術メモ帳 - zshで出来ている新感覚エディタzed

    zshのZLE Editorを使って作られた zedというテキストエディタがカッコいいうえに非常に便利。 zshの補完がそのまま使えたりする。 % autoload zed % zed ./test.txt 操作方法は、 変更を保存するときは、Ctrl+X Ctrl+W または Ctrl+J と入力。 破棄して終了したいときは Ctrl+C を入力すればいい。 あとはどんな bindkey をしているかによって変わるのだが 基的にemacsキーバインド 使ってみればわかるけどすごく新感覚なエディタ。 その場で編集してる感がすごくある。 ソースにも "他のシェルにはコレは出来ない" と書いてある。(いいすぎだ) # No other shell could do this. # Edit small files with the command line editor. あと、以下のような

    技術メモ帳 - zshで出来ている新感覚エディタzed
  • 入力履歴からの予測による自動補完機能 - 技術メモ帳

    zshには、過去の入力履歴から予測し、 リアルタイムに自動補完してくれるという機能というのがあるようだ。 predict-on というのが該当する。 例えば以下の画像は、 この機能を有効にした状態で 'h' とだけ入力した状態だ。 Enter キーを押すだけでただちに実行できる。 なんだか、結構便利だったので 以下のような設定で使用する事にした。 % autoload predict-on % zle -N predict-on % zle -N predict-off % bindkey '^X^Z' predict-on % bindkey '^Z' predict-off % zstyle ':predict' verbose true zsh の man で載っているキーバインドに設定してみた。 Ctrl+X Ctrl+Z で predictモードが ON になり、 Ctrl+Z

    入力履歴からの予測による自動補完機能 - 技術メモ帳
    f99aq
    f99aq 2006/12/18
    設定した!
  • フルスクリーンアプリを終了したときに元のコンソールの状態に復元する - 技術メモ帳

    vimemacs、less などのフルスクリーンアプリを終了したときに、 元のコンソールの状態に戻る環境と、戻ってくれない環境というのがあり、 前々からすごく疑問だったので、この際だからと調べてみた。 もしかしたら誰かの役に立つかもしれないので書いておく。 肝心の原因は、端末データベースの enter_ca_mode / exit_ca_mode ケーパビリティ が 適切に設定されてないということにあった。 当は vim などのフルスクリーンアプリは "元のコンソール状態" に復元しようと、 enter_ca_mode / exit_ca_mode というものを出力するのだが、 このときに、端末データベースから "実際に出力すべきエスケープシーケンス" というものを取得しており、 ここが正しく設定されていないため、うまく元のコンソールに戻らない。 これらを適切に設定すれば良いのだが

  • 技術メモ帳: [unix]複数のファイルの名前をまとめて変更する

    複数のファイルの名前を変更する際に、 便利なコマンドというものがある。 いくつかご紹介させていただこう。 カレントディレクトリにあるファイルの名前を、 たとえば、*.html を *.htm と名前を変更するという課題に対し どのぐらいエレガントに書けるかというのを比較してみる。 まず、普通にやったらどうだろう。 おそらく、for文 をつかうことだろう。 for file in *.html do base=`basename $file .html` mv $base.html $base.htm; done; zshだともうちょっとスマートにかけて、 for file in *.html do mv $file:r.html $file:r.html; done; こんな具合。 for文 が嫌いなネット右翼のために、 xargs を使ってこの問題を解いてみよう。 ls -1 *.htm

    f99aq
    f99aq 2006/11/23
    zmv
  • zshのzptyを使って端末が必要な処理を自動化する - 技術メモ帳

    zsh のモジュールに zpty というのがあるのを最近発見した。 どうもコレを利用すれば指定したコマンドを 仮想端末上で実行することが出来るらしい。 具体的にどういったことが出来るようになるのかというと、 端末が必要なプログラムを自動化することが出来る。 たとえば、パスワード入力処理などだ。 パスワード文字列を標準入力から読み込ませようとしても、 大抵のプログラムでは入力できない。 なぜかというと、多くのプログラムにおいてパスワード入力処理は 端末から読み込むように作られているからだ。 zpty を利用すればそういったたぐいのものをすべて自動化できる。 いわゆる、expect というコマンドで実現していたことが zsh だけで出来るのだ。 今回は、簡単に試すことが出来るサンプルとして、 su コマンドのパスワード入力を zpty を使って自動化してみる。 まず、zsh に標準添付されてい

    f99aq
    f99aq 2006/11/10
  • 技術メモ帳 - 拡張子ごとにコマンドを対応づける

    拡張子ごとにコマンドを対応づける事が出来る Suffix Alias という機能が zsh 4.2系から実装されていたらしい。 知らなかった。 どんな事が出来るのかというと たとえば、 alias -s txt=cat とした場合、 以下のようにするだけで、 % ./file.txt 先ほど設定したコマンドが自動で実行されるようになる。 % cat ./file.txt あとはもうアイデアしだいだが、 拡張子が *.log のときは、tail -f するなんて事も出来る。 alias -s log='tail -f' 参考: http://zshwiki.org/home/examples/aliassuffix http://slashdot.jp/articles/04/03/27/2333234.shtml?topic=80 http://zsh.dotsrc.org/Doc/Rel

    f99aq
    f99aq 2006/11/09
  • BASE64 encode/decode - 技術メモ帳

    encode >>> btoa("hello") "aGVsbG8=" decode >>> atob("aGVsbG8=") "hello" Firefoxだけっぽいけど、 ボクは、Firebugで使用できる という事に意味を感じる。

    f99aq
    f99aq 2006/09/03
  • Greasemonkeyで永続的に外部スクリプトを利用する - 技術メモ帳

    GM_setValue / GM_getValue + unsafeWindow.eval を使って 永続的に外部スクリプトを利用する方法を考えてみた。 わざわざ DOM で script要素 を毎回注入するよりも 速いんじゃないかと思う。 Greasemonkeyには、GM_setValue / GM_getValue というのがあって、 GM_setValue("キー", "値") 上記のように入力してあげる事によって、たとえ、 Firefoxを終了させたとしても消えないデータを作成する事が出来る。 そして、それを利用して、 初回のみ XmlHttpRequest で外部スクリプトデータを取得して、 GM_setValue でスクリプトデータを永続化しておき、 二回目以降は、それを GM_getValue して eval するようにした。 以下は、永続的に prototype.js を

  • 技術メモ帳 - URI の data スキーム

    今日初めて知ったのだが、data スキームを使えば URIにデータを組み込めるそうだ。 以下のようにすれば、 dataスキームで、任意の画像を表示させる事が出来る。 <img src="data:image/gif;base64,BASE64データ"> たとえば、 google のロゴを dataスキーム を 利用して表示したかったら、 $ curl -s http://www.google.com/images/logo_sm.gif | openssl base64 | tr -d '\n' こんな感じで base64 化したロゴ画像データを 該当部分に、貼付ければ良い。 <img src="data:image/gif;base64,ここに貼付ける。"> 該当RFC: http://www.ietf.org/rfc/rfc2397.txt

    f99aq
    f99aq 2006/08/26
    "data:image/gif;base64,BASE64データ"
  • Firebugの便利な組み込み関数 - 技術メモ帳

    id:brazil さんのブックマークで知ったのだが、 Firebugには、便利な組み込み関数が定義されているようだ。 一通りさわってみたのだが、 $x() で 任意のXPath要素が取得できるのとかに感動した。 そして、やっぱりちゃんとドキュメント読むべきだなぁと思った。 XPathから要素を取得する。 $x("/html/body/h1"); -> 要素の配列が返ってくる。 selector名から要素を取得する。(getElementsByTagName) $$("h1") -> 要素の配列 所要時間測定 console#time, console#timeEnd time ~ timeEnd で囲んだ部分の所要時間を 計測することが出来るみたいで、 以下のような関数にまとめると良さそうだ。 function bench( callback ) { var uniq_id = Date

  • sshで指定したコマンドしか実行できない公開鍵を作る - 技術メモ帳

    自動バックアップ処理をさせたいが シェル権限を与えたくないときとかに使える技。 やり方は簡単で $HOME/.ssh/authorized_keys の "コマンドを制限したい公開鍵" の行の先頭に 実行させたいコマンドを記述すればよい。 そのときのフォーマットはだいたい以下のようになる。 command="実行させたいコマンド",sshのオプションをカンマ区切りで書く command=hoge というのを付け足すことによって その公開鍵でアクセスがあったときに 指定したコマンドを実行させることができる。 たとえば、uptime を実行させたいときは、 以下のようにすればよい。 command="uptime",no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding ssh-rsa AAAABbBFERTWER....

  • 1