blog/content/post/2011/09/19/2011-09-19-00001525.md

92 lines
4.4 KiB
Markdown
Raw Normal View History

2019-03-31 11:00:21 +00:00
---
title: Gaucheで外部コマンドを実行する
author: kazu634
date: 2011-09-19
wordtwit_post_info:
- 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:5447;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}'
categories:
- gauche
- Lisp
---
<div class="section">
<p>
Gaucheで外部コマンドを実行しようとしたのですが、うまく行かなかったのでとりあえずダンプしておきます。
</p>
<h4>
やりたいこと
</h4>
<p>
外部コマンドをGaucheから実行したい
</p>
<h4>
ここまではわかった
</h4>
<p>
Gaucheで外部コマンドを実行する場合は、どうやら run-process というものがあるらしいので、このコマンドを使えばよさそう
</p>
<h4>
うまく行かなかったこと
</h4>
<p>
次のようなコマンドを実行したかったけれど、実行に失敗した:
</p>
<pre class="syntax-highlight">
% virt-<span class="synStatement">install</span> <span class="synSpecial">--name</span> dev1 <span class="synSpecial">--ram</span> <span class="synConstant">512</span> <span class="synSpecial">--disk</span> <span class="synIdentifier">path</span>=<span class="synIdentifier">dev1.img,size</span>=<span class="synConstant">10</span> <span class="synSpecial">--vcpus</span> <span class="synConstant">1</span> <span class="synSpecial">--network</span> <span class="synIdentifier">bridge</span>=<span class="synIdentifier">br0,model</span>=virtio <span class="synSpecial">--graphic</span> <span class="synIdentifier">vnc,listen</span>=<span class="synConstant"></span>.<span class="synConstant"></span>.<span class="synConstant"></span>.<span class="synConstant"></span> <span class="synSpecial">--pxe</span>
</pre>
<p>
とりあえず REPL から実行してみます:
</p>
<pre class="syntax-highlight">
gosh<span class="synStatement">&#62;</span> <span class="synStatement">(</span>use gauche.process<span class="synStatement">)</span>
<span class="synComment">#&#60;undef&#62;</span>
gosh<span class="synStatement">&#62;</span> <span class="synStatement">(</span>run-process <span class="synStatement">'</span><span class="synConstant">(virt-install --name dev1 --ram 512 --disk path=dev1.img,size=10 --vcpus 1 --network bridge=br0,model=virtio --graphic vnc,listen=0.0.0.0 --pxe))</span>
<span class="synConstant">#&#60;process 1148 &#34;virt-install&#34; active&#62;</span>
<span class="synConstant">gosh&#62; ERROR Unknown argument </span><span class="synStatement">'</span>,<span class="synIdentifier">size</span>=<span class="synConstant">10</span><span class="synStatement">'</span>
</pre>
<p>
なんか上手くいかない。マニュアルにはこんな記述が。。。:
</p>
<blockquote title="404 Not Found" cite="http://practical-scheme.net/gauche/man/gauche-refj_92.html">
<p>
cmd/argsの各要素は、x->stringで文字列に変換されます。
</p>
<p>
<cite><a href="http://practical-scheme.net/gauche/man/gauche-refj_92.html" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://practical-scheme.net/gauche/man/gauche-refj_92.html', 'Gauche ユーザリファレンス: 9.16 gauche.mop.singleton &#8211; シングルトン');" target="_blank">Gauche ユーザリファレンス: 9.16 gauche.mop.singleton &#8211; シングルトン</a></cite>
</p>
</blockquote>
<p>
というわけで実験:
</p>
<pre class="syntax-highlight">
gosh<span class="synStatement">&#62;</span> <span class="synStatement">(</span>x-<span class="synStatement">&#62;</span>string <span class="synStatement">'</span><span class="synConstant">(virt-install --name dev1 --ram 512 --disk path=dev1.img,size=10 --vcpus 1 --network bridge=br0,model=virtio --graphic vnc,listen=0.0.0.0 --pxe))</span>
<span class="synConstant">&#34;(virt-install --name dev1 --ram 512 --disk path=dev1.img ,size=10 --vcpus 1 --network bridge=br0 ,model=virtio --graphic vnc ,listen=0.0.0.0 --pxe)&#34;</span>
</pre>
<p>
あっ、なんか「,」のところにスペースが入っている。。。原因はこれか。
</p>
<h4>
さてさて
</h4>
<p>
解決策はどうすればいいのだろうか。。。
</p>
</div>