O que é um “argumento não opcional”?

7

Estou tentando entender info who , mas falho completamente com o termo » argumento não-opção «. Alguém pode me explicar este termo em palavras simples ou um exemplo?

UPDATE : de "info quem":

If given no non-option arguments, 'who' prints the following information for each user currently logged on: login name, terminal line, login time, and remote hostname or X display.

If given one non-option argument, who' uses that instead of a default system-maintained file (often/var/run/utmp' or /etc/utmp') as the name of the file containing the record of users logged on. /var/log/wtmp' is commonly given as an argument to 'who' to look at who has previously logged on.

If given two non-option arguments, who' prints only the entry for the user running it (determined from its standard input), preceded by the hostname. Traditionally, the two arguments given aream i', as in 'who am i'.

Eu [pensei em] saber a diferença entre um argumento e uma opção, mas isso [novamente] liga muito.

    
por erch 19.10.2013 / 02:48

3 respostas

5

A terminologia não está completamente consertada, então documentação diferente usa termos diferentes, ou pior, os mesmos termos com significados diferentes. A terminologia na página man que você está lendo é comum. É o usado no padrão POSIX . Em suma, cada palavra após o comando é um argumento, e os argumentos que começam com - são opções.

Argument

In the shell command language, a parameter passed to a utility as the equivalent of a single string in the argv array created by one of the exec functions. An argument is one of the options, option-arguments, or operands following the command name.

Operand

An argument to a command that is generally used as an object supplying information to a utility necessary to complete its processing. Operands generally follow the options in a command line.

Option

An argument to a command that is generally used to specify changes in the utility's default behavior.

“Utilitário” é o que geralmente é chamado de “comando” (o padrão usa a palavra utilitário para evitar ambigüidade com o significado de “comando” que inclui os argumentos ou mesmo comandos shell compostos). / p>

A maioria dos comandos segue a sintaxe do argumento do utilitário padrão , em que as opções começam com uma - (traço aka menos). Portanto, uma opção é algo como -a (opção curta, segue as diretrizes POSIX) ou --all (opção longa, uma extensão do GNU). Um argumento não-opcional é um argumento que não começa com - , ou que consiste unicamente em - (que who trata como um nome de arquivo literal mas muitos comandos tratam como significando entrada padrão ou saída padrão) .

Além disso, algumas opções têm um argumento. Este argumento pode ser passado de várias maneiras:

  • Para uma opção de uma única letra, no mesmo argumento para o utilitário: foo -obar : bar é o argumento para a opção de uma única letra -o .
  • Na sintaxe do argumento longo do GNU, no mesmo argumento, separada por um sinal de igual: foo --option=bar .
  • Em um argumento separado: foo -o bar . Se a opção -o receber um argumento, então bar será o argumento da opção -o . Se -o não aceitar um argumento, então -o é um operando.

Aqui está um exemplo mais longo:

tail -n 3 myfile

-n é uma opção, 3 é um argumento para a opção -n e myfile é um operando.

A terminologia é diferente, então você pode encontrar documentos que usam argumento no sentido em que POSIX usa operando . Mas “argumento de não-opção” é mais comum do que qualquer termo para este significado.

    
por 20.10.2013 / 02:34
4

O problema é que as opções (ou chaves ou flags, como você quiser chamá-las) contam como argumentos também. De fato, qualquer coisa que você fornecer após o próprio nome do comando compõe os argumentos do comando (exceto para construções usadas pelo shell como o redirecionamento, por exemplo).

Seu programa / script recebe tudo junto como argumentos e precisa separar os argumentos da opção (argumentos que são opções) de outros ... você adivinhou! ... argumentos não-opcionais .

O que a página de informações está dizendo é que se who receber um argumento que não é uma opção, ele considerará isso como uma alternativa ao arquivo padrão que ele consulta para informações de login.

    
por 19.10.2013 / 02:56
1

Eu ainda acho que o fraseado é ruim nisso e tentaria não ficar preso. O que eles estão tentando dizer é que na declaração do protótipo eles incluíram assim:

 'who' [OPTION] [FILE] [am i]

Então, quando eles dizem "Se não houver argumentos não-opcionais", eles estão se referindo a [FILE] e [am i] .

Seguindo essa lógica quando eles dizem "Se determinado um argumento não-opcional", ou seja, [FILE] , então você está substituindo o [FILE] location, /var/run/utmp .

Por fim, para este comentário, "Se forem fornecidos dois argumentos não opcionais", por exemplo, [am i] , você está solicitando informações sobre o usuário que acabou de executar o comando:

$ who am i
saml     pts/5        2013-10-18 16:29 (:0.0)

-or-

$ who mom likes
saml     pts/5        2013-10-18 16:29 (:0.0)

A descrição está correta, mas eles definitivamente a confundiram usando o termo "sem argumentos não-opcionais".

Na mente dos autores, estas são as opções:

  -a, --all         same as -b -d --login -p -r -t -T -u
  -b, --boot        time of last system boot
  -d, --dead        print dead processes
  -H, --heading     print line of column headings
  -l, --login       print system login processes
      --lookup      attempt to canonicalize hostnames via DNS

  ....

E [FILE] e [am i] e [mom likes] são as não opções. Mas estas são as opções ALL , por isso a diferença está limitada apenas a esta ferramenta!

    
por 19.10.2013 / 20:00