virshのソースコードを読んだ時のメモ
virshはlihbvirt内の https://github.com/libvirt/libvirt/tree/c6c23415706ee303a9fbeee5326a4e504645fe3e/tools にあるのでそこをみていく.
とりあえずvirsh.cの一番下を見ると,mainがあるので動作の発端が見える. 初期化周りが見えるが,consoleのescapekeyがハードコードしてあったりして笑う. l. 489
virshCtl.escapeChar = "^]"; /* Same default as telnet */
こんな大きなコードでも愚直にprognameを出してるもんなんだなあと思う. l.852
if (!(progname = strrchr(argv[0], '/')))
progname = argv[0];
else
progname++;
ctl->progname = progname;
コマンド実行させてそうな関数呼び出しvshCommandRunが見つかる. ついでにinteractive modeとの場合分け部分も見つかる. コマンドを読み解くにはctl(vshControlなる構造体)が重要そう. ちょっと上にあるvirshParseArgvで引数を解釈して構造体を作り上げてよしなにしている感じがある. l.885
if (!virshParseArgv(ctl, argc, argv) ||
!virshInit(ctl)) {
virshDeinit(ctl);
exit(EXIT_FAILURE);
}
if (!ctl->connname)
ctl->connname = g_strdup(getenv("VIRSH_DEFAULT_CONNECT_URI"));
if (!ctl->imode) {
ret = vshCommandRun(ctl, ctl->cmd);
} else {
/* interactive mode */
vshCommandRunもしくはvirshParseArgvから続き書く.