Por que usar traço superflous (-) para passar flags de opção para tar?

28

Para criar um arquivo tar para um diretório, o comando tar com as opções compress , verbose e file pode ser digitado assim:

$ tar -cvf my.tar my_directory/

Mas também funciona da seguinte maneira:

 $ tar cvf my.tar my_directory/

Ou seja, sem o traço (-) que precede as opções. Por que você iria passar um traço (-) para a lista de opções?

    
por Milktrader 22.05.2011 / 01:26

4 respostas

39

Existem vários padrões diferentes para opções que foram usadas historicamente em aplicativos UNIX. Vários antigos, como tar , usam um esquema posicional:

command options arguments

como por exemplo o tar usa

tar *something*f "file operated on" *"paths of files to manipulate"*

Em uma primeira tentativa para evitar a confusão, tar e alguns outros programas com o estilo antigo flags-arguments permitiram delimitar os flags com traços, mas a maioria de nós antigos simplesmente ignorou isso. / p>

Alguns outros comandos têm uma sintaxe de linha de comando mais complicada, como dd (1) que usa sinalizadores, sinais de igual, nomes de caminho, argumentos e uma perdiz em uma pereira, todos com abandono. / p>

No BSD e nas versões posteriores do unix, isso tinha mais ou menos convergido para flags de caractere único marcadas com '-', mas isso começou a apresentar alguns problemas:

  • as bandeiras podem ser difíceis de lembrar
  • às vezes você realmente queria usar um nome com '-'
  • e especialmente com ferramentas GNU, começaram a haver limitações impostas pelo número de possíveis sinalizadores. Então as ferramentas GNU adicionaram opções longas do GNU como --output .

Em seguida, a Sun decidiu que o extra '-' era redundante e começou a usar sinalizadores de estilo longo com single '-s'.

E foi assim que aconteceu a bagunça que é agora.

    
por 22.05.2011 / 01:40
8

Você pode dar opções de tar na maneira unix padrão tar -c -f foo -v -B file1 file2 file3 onde você precisa do traço para diferenciar entre opções e parâmetros ou os nomes dos arquivos no final da linha de comando. Ou você pode colocar todas as opções juntas no primeiro argumento e, nesse caso, o traço é opcional.

Em seguida, há ps , onde você usa os traços se estiver usando as opções SysV-ish e os deixe de fora se estiver usando opções BSD-ish, apenas para tornar as coisas mais confusas.

E nem vamos falar sobre find .

    
por 22.05.2011 / 01:36
2

O traço é usado para desambiguar entre os nomes e valores de um parâmetro de opção. Eu acho que é mais uma convenção padrão.

    
por 22.05.2011 / 01:29
0

Existem até quatro convenções para usar as opções de linha de comando do Unix:

  1. -o -p -t (traço antes de cada opção)
  2. -opt (traço antes de um conjunto de opções)
  3. opt (nenhum traço antes de um conjunto de opções)
  4. - opção longa (traço duplo antes do nome de uma opção)

Por exemplo:

$ tar -x -v -z -f package.tar.gz
$ tar -xvzf package.tar.gz
$ tar xvzf package.tar.gz
$ tar --extract -verbose -gzip -file package.tar.gz
    
por 14.12.2016 / 09:11

Tags