Help us understand the problem. What is going on with this article?

zshでコマンドラインサーバー、zrv.zshのご紹介

More than 5 years have passed since last update.

極稀に、今入力しているコマンドを、別の端末の上で既に動いている zsh で実際に入力したように実行したいということがあったので作ってみました。

デモ動画はこちらから (http://www.youtube.com/watch?v=AfPgznZvBr8h):

zrv.zsh

ソースコードはこちらから (https://github.com/hchbaw/zrv.zsh.git)

使い方です。

ファイルを autoload して zrv を呼び出してサーバーをスタートします。

% tmux
;# サーバー側はtmux上で動かすのが必須です
% git clone https://github.com/hchbaw/zrv.zsh.git
% fpath+="$(echo ${:-./zrv.zsh}(:A))"
% autoload -Uz zrv
% zrv

クライアント側では以下の zrv-client のような関数を使って通信します。

zrv-client () {
  local -i REPLY;
  setopt localoptions errreturn
  zmodload zsh/net/socket
  zsocket /tmp/zrv-${UID}/default
  print -u $REPLY "$1"
  exec {REPLY}>&- # このファイルディスクリプタ閉じるのを忘れないで!
}

関数を定義したら例えば以下のような感じに使うことができます。

% zrv-client "echo hi"
⇒ "echo hi" をサーバーに送信、サーバー側で実行、表示します。
% zrv-client "sleep 5
echo hihi"
⇒ サーバーに復数のコマンドを送信、サーバー側では一行すつ実行、表示します。

以下雑感です。

プロトコルを考えるのはつらかったので、クライアントから切断された後、送ったコマンドが実行される、ということにしました。

accept-line の後に何かキーを押さないと実行されなかったのでこんな感じになっていて、サーバー側は tmux 上じゃないと動作しません。

recursive-edit 内でないと $BUFFER を更新しても実際のコマンドラインに反映されなかったので、やっぱりこんな感じになっています。

といった、強引にねじふせたおもちゃです。正直なんだかなあという感じになっちゃったサーバーですけれども少しは遊べます。

自分では主に、今いるウインドウの横のウインドウで、サーバーが表示されているペインを表示して、今いるウインドウのコマンドラインの内容を $PWD への cd も伴って送信する、などしています。

なんだろ、このコマンドを実行しちゃうと出力でウインドウ一ぱいになっちゃいそう、とか、コマンドの結果が返ってくるのに微妙に時間経かりそうだ、という時にサーバー側で実行して、その次のコマンドを入力し始める、みたいな使い方です。

ごめんなさい長くなっちゃった。おつかれ様でした!

hchbaw
T-Code連習中
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした