erl的启动参数分析
關(guān)于erl的啟動(dòng)參數(shù)主要分為emulator flags,?flags?and?plain arguments
emulator flags:以‘+’開(kāi)頭的啟動(dòng)參數(shù),如+P, +W等用于控制模擬器的行為。
flags:以'-'開(kāi)頭的啟動(dòng)參數(shù),如-sname, -boot等,這些需要被傳遞給ert中的init模塊進(jìn)行解析處理。
plain arguments:沒(méi)有詳細(xì)的定義,基本就是除了以上emulator flags,和flags,其他的都屬于此類。用戶自定義的flag, 在init對(duì)arguments的解析過(guò)程中進(jìn)行解析和存儲(chǔ)。
?
模擬器flag主要控制?emulator的行為或者配置,這部分直接查文檔即可得到相應(yīng)解釋。
接下來(lái),我們來(lái)查看一下init中關(guān)于上面關(guān)于flags和plain arguments的解析。
parse_boot_args(Args) ->parse_boot_args(Args, [], [], []).parse_boot_args([B|Bs], Ss, Fs, As) ->case check(B) ofstart_extra_arg ->{reverse(Ss),reverse(Fs),lists:reverse(As, Bs)}; % BIFstart_arg ->{S,Rest} = get_args(Bs, []),parse_boot_args(Rest, [{s, S}|Ss], Fs, As);start_arg2 ->{S,Rest} = get_args(Bs, []),parse_boot_args(Rest, [{run, S}|Ss], Fs, As);eval_arg ->{Expr,Rest} = get_args(Bs, []),parse_boot_args(Rest, [{eval, Expr}|Ss], Fs, As);flag ->{F,Rest} = get_args(Bs, []),Fl = case F of[] -> [B];FF -> [B,FF]end,parse_boot_args(Rest, Ss, [list_to_tuple(Fl)|Fs], As);arg ->parse_boot_args(Bs, Ss, Fs, [B|As]);end_args ->parse_boot_args(Bs, Ss, Fs, As)end; parse_boot_args([], Start, Flags, Args) ->{reverse(Start),reverse(Flags),reverse(Args)}.check(<<"-extra">>) -> start_extra_arg;
check(<<"-s">>) -> start_arg;
check(<<"-run">>) -> start_arg2;
check(<<"-eval">>) -> eval_arg;
check(<<"--">>) -> end_args;
check(X) when is_binary(X) ->
case binary_to_list(X) of
[$-|_Rest] -> flag;
_Chars -> arg %Even empty atoms
end;
check(_X) -> arg. %This should never occur
get_args([B|Bs], As) ->
case check(B) of
start_extra_arg -> {reverse(As), [B|Bs]};
start_arg -> {reverse(As), [B|Bs]};
start_arg2 -> {reverse(As), [B|Bs]};
eval_arg -> {reverse(As), [B|Bs]};
end_args -> {reverse(As), Bs};
flag -> {reverse(As), [B|Bs]};
arg ->
get_args(Bs, [B|As])
end;
get_args([], As) -> {reverse(As),[]}.
使用init:get_arguments/0, init:get_argument/1獲取flags
使用init:get_plain_arguments/0獲取plain arguments。
?
關(guān)于plain arguments我們可以有三種方式在啟動(dòng)時(shí)輸入。
1. 在所有flag的開(kāi)頭
如:erl xx yy -sname xx
plain arguments 為["xx", "yy"].
arguments中sname值為[["xx"]].
?
2.但有的時(shí)候我們需要在想在中間或者接著其他flags插入plain arguments時(shí)候,這時(shí)候我們需要用 -- ?來(lái)分隔
如:erl -sname xx xx?
這樣使用init:get_argument(sname)時(shí),
獲得sname值為[["xx", xx"]], init:get_plain_arguments() 則為[]
但如果這樣erl -sname xx --x
則獲得sname值為[["xx"]],
plain arguments為["xx"].
?
3. 最后,我們可以-extra之后輸入, 這之后的所有參數(shù)全部歸為plain arguments中,
如:erl -extra yy -sname xx
plain arguments為["yy", "-sname", "xx"]
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/star-star/archive/2012/12/26/2834194.html
總結(jié)
以上是生活随笔為你收集整理的erl的启动参数分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Eclipse的ExtJs智能提示
- 下一篇: 写一个编译器