¿Qué significa "-" (guión doble) en este comando de shell?

13

Tengo este comando de shell:

kill `cat -- $PIDFILE`

¿Qué hace el doble aquí? ¿Por qué no usar solo

kill `cat $PIDFILE`
daniels
fuente

Respuestas:

20

El --le dice que catno intente analizar lo que viene después como opciones de línea de comando.

Como ejemplo, piense en lo que sucedería en los dos casos si la variable $PIDFILEse definiera como PIDFILE="--version". En mi máquina, dan los siguientes 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
Mikael Auno
fuente
3
Vale la pena señalar que este comportamiento (aunque muy común) está definido por el programa receptor (es decir cat) y no por el shell.
dmckee --- ex gatito moderador
¿Existe alguna documentación o tutorial sobre cómo escribir su propio script de shell que comprenda que eso --significa el final de las opciones de línea de comandos? He visto algunos con getopts y otras técnicas, pero nada de discusión --.
CMCDragonkai
3
@CMCDragonkai No necesita mirar más allá de la getopt(1)página del manual : "Cada parámetro después de un parámetro '-' siempre se interpreta como un parámetro sin opción".
Mikael Auno
1

POSIX.1-2017

POSIX también lo especifica en: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02

12.2 Pautas de sintaxis de utilidad

Directriz 10:

La primera - argumento de que no es una opción-argumento debe ser aceptado como un delimitador que indica el final de las opciones. Los siguientes argumentos deben tratarse como operandos, incluso si comienzan con el carácter '-'.

Ver también: /unix/11376/what-does-double-dash-mean-also-known-as-bare-double-dash

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
fuente