Co oznacza „-” (podwójny myślnik) w tym poleceniu powłoki?

14

Mam następujące polecenie powłoki:

kill `cat -- $PIDFILE`

Co podwójne - robi tutaj? Dlaczego nie użyć po prostu

kill `cat $PIDFILE`
Daniels
źródło

Odpowiedzi:

21

--Mówi catnie próbować analizować, co przychodzi po niego jako opcje wiersza poleceń.

Jako przykład zastanów się, co by się stało w dwóch przypadkach, gdyby zmienna $PIDFILEzostała zdefiniowana jako PIDFILE="--version". Na moim komputerze dają następujące wyniki:

$ 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
źródło
3
Warto zauważyć, że to zachowanie (choć bardzo powszechne) jest definiowane przez program odbierający (tj. cat), A nie przez powłokę.
dmckee --- były moderator kociak
Czy jest jakaś dokumentacja lub samouczek na temat pisania własnego skryptu powłoki, który rozumie, co --oznacza koniec opcji wiersza poleceń? Widziałem takie z getoptami i innymi technikami, ale nic nie dyskutuje --.
CMCDragonkai
3
@CMCDragonkai Nie musisz szukać dalej niż getopt(1)strona podręcznika : „Każdy parametr po parametrze„ - ”jest zawsze interpretowany jako parametr inny niż opcja”.
Mikael Auno,
1

POSIX.1-2017

POSIX określa to również na stronie: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02

12.2 Wytyczne dotyczące składni narzędzi

Wytyczna 10:

Pierwszy - Argument, że nie jest opcją, argument powinien być przyjęty jako ogranicznik wskazujący koniec opcji. Wszelkie poniższe argumenty należy traktować jako operandy, nawet jeśli zaczynają się znakiem „-”.

Zobacz także: /unix/11376/what-does-double-dash-mean-also-known-as-bare-double-dash

Ciro Santilli
źródło