Pergunta

Eu realmente não entendo como argumentos de linha de comando trabalhar com escripts.A partir da página de manual, entendo que os argumentos são passados como uma lista de cadeias de caracteres para o main/1.Como posso analisar os argumentos passados para o principal?

Considere o seguinte:

#!/usr/bin/env escript
usage() ->
  io:format("Usage: ~s <port#>~n",[escript:script_name()]),
  halt(1).

main([]) ->
  usage();
main(Args)->
  io:format("Starting test server on port #~s~n",[Args]).

Um teste simples e tudo parece boa, com apenas um argumento.

  ./test_server.erl 17001
   Starting test server on port #17001

Que tal se eu passar vários argumentos?

  ./test_server.erl 17001 8 9 abc
   Starting test server on port #1700189abc

Não era o que eu queria.Eu tentei spliiting a cadeia de caracteres no espaço de caractere:

  ....
  ArgsList = string:tokens(Args, " "),
  io:format("Length: ~w~n",[length(ArgsList)]),
  ....

Rendimentos Comprimento:1

Foi útil?

Solução

comprimento(L)

length/1 é construído em função de que você pode usar só como é:

io:format("Length: ~p~n", [length(Args)])

Args

Args é uma lista de cadeias de caracteres.Esta chamada (usando ~p como o formato):

io:format("Starting test server on port #~p~n", [Args]).

Teria o resultado:

./test_server.erl 17001 8 9 abc
Starting test server on port #["17001","8","9","abc"]

Se você estiver usando ~s, Erlang interpreta-lo como uma seqüência de caracteres (ou IO lista, realmente) e que seja impressa com todos os elemento concatenado.

Para imprimir todos os argumentos um por um, tenta este, em vez de io:format/2 chamada:

[io:format("~s~n", [A]) || A <- Args].
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top