O que “-” (traço duplo) significa neste comando do shell?


12

Eu tenho este comando shell:

kill `cat -- $PIDFILE`

O que o duplo - faz aqui? Por que não usar apenas

kill `cat $PIDFILE`

Respostas:


20

O --diz catpara não tentar analisar o que vem depois como opções de linha de comando.

Como exemplo, pense no que aconteceria nos dois casos se a variável $PIDFILEfosse definida como PIDFILE="--version". Na minha máquina, eles fornecem os seguintes resultados:

$ cat $PIDFILE
cat (GNU coreutils) 6.10
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Torbjorn Granlund and Richard M. Stallman.

$ cat -- $PIDFILE
cat: --version: No such file or directory

3
Vale ressaltar que esse comportamento (embora muito comum) é definido pelo programa receptor (ou seja cat) e não pelo shell.
dmckee --- ex-moderador gatinho

Existe alguma documentação ou tutorial sobre como escrever seu próprio script de shell que entenda que --significa o fim das opções da linha de comando? Já vi pessoas com getopts e outras técnicas, mas nada discutindo --.
precisa saber é o seguinte

3
@CMCDragonkai Você não precisa procurar mais além da getopt(1)página de manual : "Cada parâmetro após um parâmetro '-' é sempre interpretado como um parâmetro que não é opcional".
Mikael Auno

1

POSIX.1-2017

O POSIX também o especifica em: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02

12.2 Diretrizes de sintaxe do utilitário

Diretriz 10:

O primeiro - argumento de que não é uma opção de argumento deve ser aceito como um delimitador que indica o fim das opções. Quaisquer argumentos a seguir devem ser tratados como operandos, mesmo se começarem com o caractere '-'.

Consulte também: /unix/11376/what-does-double-dash-mean-also-known-as-bare-double-dash

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.