7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ElixirAdvent Calendar 2017

Day 15

iexとControl-g

Last updated at Posted at 2017-12-15

Emacs と Control-g と私

私は Emacs というエディタを使っています。

Emacsでは「固まったりして困ったらとりあえずControl-g(以下 C-g)を押せ」ということになっているので、
困ると C-g を押すクセが私にはあります。

iex と C-g と私

iex を使っているときにも意図せずうっかり C-g を押してしまうことがあります。
すると

iex(1)>
User switch command
 -->

こんな状態になってしまい、このあと何をしていいのかさっぱりわからないので、
いつも C-c a で abort して、もう一回 iex をし直すというのを繰り返していました。

さすがに毎回iexを抜けるのはもう嫌なので、今回はここを掘り下げてみたいと思います。

ヘルプ

ググると、どうやら h でヘルプがみられるらしい。

  iex(1)>
  User switch command
+  --> h
+   c [nn]            - connect to job
+   i [nn]            - interrupt job
+   k [nn]            - kill job
+   j                 - list all jobs
+   s [shell]         - start local shell
+   r [node [shell]]  - start remote shell
+   q                 - quit erlang
+   ? | h             - this message

iex に戻りたい

単純に iex に戻りたいだけなら、 c でいいようです。

  iex(1)>
  User switch command
   --> h
    c [nn]            - connect to job
    i [nn]            - interrupt job
    k [nn]            - kill job
    j                 - list all jobs
    s [shell]         - start local shell
    r [node [shell]]  - start remote shell
    q                 - quit erlang
    ? | h             - this message
+ --> c

何も出ないので、不安になりますが、これでもうiexに戻っているようです。
elixir のコードを実行して確認してみましょう。

  iex(1)>
  User switch command
   --> h
    c [nn]            - connect to job
    i [nn]            - interrupt job
    k [nn]            - kill job
    j                 - list all jobs
    s [shell]         - start local shell
    r [node [shell]]  - start remote shell
    q                 - quit erlang
    ? | h             - this message
   --> c
+ self
+ #PID<0.88.0>
+ iex(2)>

めでたしめでたし。

remote?

r [node [shell]]  - start remote shell

というのが気になるので、試してみたいと思います。

2 つ iex を立ち上げておきます。

[手元のMac]$ iex --name temoto@192.168.1.100
[リモートのUbuntu]$ iex --name remote@192.168.1.200

remote と temoto。では r を試してみます。

iex(temoto@192.168.1.100)1>
User switch command
 --> r 'remote@192.168.1.200'
 -->

またしても何もでないので、うまく行ってないのかと思いきや、なんとこれで成功しています。
j で一覧をみてみましょう。 

  iex(temoto@192.168.1.100)1>
  User switch command
   --> r 'remote@192.168.1.200'
+  --> j
+    1  {erlang,apply,[#Fun<Elixir.IEx.CLI.1.131305237>,[]]}
+    2* {'remote@192.168.1.200',shell,start,[]}
+  -->

*(アスタリスク) がついているのが、現在選択されている shell(?) らしいです。
この状態で c を押します。

  iex(temoto@192.168.1.100)1>
  User switch command
   --> r 'remote@192.168.1.200'
   --> j
     1  {erlang,apply,[#Fun<Elixir.IEx.CLI.1.131305237>,[]]}
     2* {'remote@192.168.1.200',shell,start,[]}
+  --> c
+ Eshell V9.1  (abort with ^G)
+ (remote@192.168.1.200)1>

つながりました!つながりましたが、Eshell って出ちゃってますね...

iex にするには、こうしないといけなかったようです。もう一度最初からです。

  iex(temoto@192.168.1.100)1>
  User switch command
+  --> r 'remote@192.168.1.200' 'Elixir.IEx'
   --> j
     1  {erlang,apply,[#Fun<Elixir.IEx.CLI.1.131305237>,[]]}
+    2* {'remote@192.168.1.200','Elixir.IEx',start,[]}
   --> c
+ Interactive Elixir (1.5.2) - press Ctrl+C to exit (type h() ENTER for help)
+ iex(remote@192.168.1.200)1> System.cmd("whoami", [])
+ {"ubuntu\n", 0}

おー!ちゃんとリモートの iex に繋がったようですね。

以上、今回は C-g で出てくるアイツと仲良くなる、でした。
Erlang界では JCLモードというらしい。まさか、Job Contro L !?

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?