Letras-chave? Letras de opção? O que são essas coisas?

1

Algumas ferramentas do tipo GNU e GNU parecem aceitar opções de maneira combinada, por exemplo, foo -hgcf em vez de foo -h -g -c -f .

Um exemplo é o tar , como em tar cXbf keepout 20 archive.shar *.txt em vez de tar -c -b 20 -X keepout -f archive.tar *.txt .

Fiquei com a impressão de que esse estilo "compactado" ou "curto" de especificar argumentos tinha um nome. Alguém sabe como é chamado, como posso aprender mais sobre ele e como descobrir se uma ferramenta oferece suporte?

    
por Nathaniel 27.03.2013 / 17:49

2 respostas

3

No Unix tradicional, as opções eram uma letra, como ls -l ou ls -d . Em alguns casos, a opção levaria um argumento, como em cut -d: -f1 /etc/passwd ( -d (delimitador) com valor : , -f (campos a serem selecionados) com valor 1 ). Onde as opções não receberam argumentos, em vez de ls -l -d -F /tmp/* , você pode escrever ls -ldF /tmp/* . Alguns comandos usam opções começando com + , como more +10 file starts more(1) na linha 10 de file .

Eu acredito que foi o projeto GNU por volta de 87 que apresentou a idéia de opções longas, como cut --delimiter=: --fields=1 /etc/passwd significa o mesmo que o comando enigmático acima no cut do GNU. Isto dá opções muito mais legíveis, e trabalha em torno de haver apenas 62 letras e dígitos, o que é muito poucas opções para, e. ls(1) ... assim, temos gcc -c -O2 --fomit-frame-pointer xxx.c e tal.

Alguns comandos heréticos usam opções longas começando com apenas - , como convert -adjoin -authenticate passwd some.jpg graphic.gif files.png -o here.pdf (de ImageMagick , o -adjoin coloca as imagens juntas, o -authenticate recebe uma senha; isso é apenas quebrado da lista de opções da página de manual, essa combinação pode não fazer sentido).

Muitos comandos (mas não todos, e depende do sabor do Unix ser seu veneno) levam -- para dizer "seguir não é mais opções, mesmo que pareçam opções", então com o rm(1) do GNU você pode se livrar do arquivo -rf comumente criado como uma brincadeira idiota por rm -- -rf .

    
por 27.03.2013 / 20:39
0

Em C, consulte getopt_long e em bash procure por getopts

    
por 27.03.2013 / 18:02

Tags