GNU/Linux >> Znalost Linux >  >> Linux

Co znamená poslední - (pomlčka) v možnostech `bash`?

Bash se chová poněkud nestandardně, pokud jde o - .

POSIX říká:

Pravidlo 10:
První -- argument, který není opčním argumentem, by měl být přijat jako oddělovač označující konec opcí. Všechny následující argumenty by měly být považovány za operandy, i když začínají - postava.

[…]

Pravidlo 13:
U nástrojů, které používají operandy k reprezentaci souborů, které mají být otevřeny pro čtení nebo zápis, - operand by měl být použit k označení pouze standardního vstupu (nebo standardního výstupu, pokud je z kontextu jasné, že je specifikován výstupní soubor) nebo souboru s názvem - .

A

Tam, kde se vyžaduje, aby utilita popsaná ve svazku Shell and Utilities POSIX.1-2017 jako vyhovující těmto pokynům přijala nebo nepřijala operand - pro standardní vstup nebo výstup je toto použití vysvětleno v části OPERANDY. V opačném případě, pokud takový nástroj používá k reprezentaci souborů operandy, je implementací definováno, zda operand - znamená standardní vstup (nebo standardní výstup) nebo soubor s názvem - .

Ale pak man 1 bash zní:

A -- signalizuje konec možností a zakáže další zpracování možností. Jakékoli argumenty za -- jsou považovány za názvy souborů a argumenty. Argument - je ekvivalentní -- .

Tedy pro Bash - neznamená ani standardní vstup, ani soubor, tedy poněkud nestandardní.

Nyní váš konkrétní případ:

curl -sL https://rpm.nodesource.com/setup_6.x | sudo -E bash -

Mám podezření autor tohoto příkazu si nemusí uvědomit - je ekvivalentní -- v tomto případě. Mám podezření autor se chtěl ujistit bash bude číst ze svého standardního vstupu, očekávali - pracovat podle směrnice 13.

Ale i kdyby to fungovalo podle pokynů, - by zde bylo zbytečné, protože bash zjistí, kdy je jeho standardním vstupem potrubí, a podle toho se chová (pokud není -c je dáno atd.).

Přesto - nefunguje podle pokynů, funguje jako -- . Stále -- je zde zbytečné, protože za ním nejsou žádné argumenty.

Podle mého názoru poslední - nic nemění. Příkaz by fungoval i bez něj.

Chcete-li zjistit, jak -- a - může být užitečné obecně, prostudujte si níže uvedený příklad.

cat v mém Kubuntu se řídí oběma pokyny a použiji je k prokázání užitečnosti - a -- .

Nechte soubor s názvem foo existovat. Toto vytiskne soubor:

cat foo

Nechte soubor s názvem --help existovat. Toto nevytiskne soubor:

cat --help

Tím se ale vytiskne soubor s názvem --help :

cat -- --help

Tím se zřetězí soubor s názvem --help s čímkoli, co pochází ze standardního vstupu:

cat -- --help -

Zdá se, že -- ve skutečnosti nepotřebujete , protože vždy můžete předat ./--help který bude pro jistotu interpretován jako soubor. Ale zvažte

cat "$file"

když předem nevíte, jaký je obsah proměnné. Nemůžete předřadit ./ k němu, protože to může být absolutní cesta a ./ zlomilo by to. Na druhou stranu může být soubor s názvem --help (protože proč ne?). V tomto případě -- je velmi užitečné; toto je mnohem robustnější příkaz:

cat -- "$file"

V man bash , na konci jednoznakových možností je:-

--    A -- signals the end of options and disables further option processing.
      Any arguments after the -- are treated as filenames and arguments. An
      argument of - is equivalent to --.

Pokud jste citovali celý příkaz, nevidím důvod pro použití - po bash v tomto případě, ale neškodí.


Linux
  1. Co znamená „–“ (dvojitá pomlčka)?

  2. Linux – Co znamená tečka za bity oprávnění souboru?

  3. Co znamená tilda (~) na konci názvu souboru?

  1. Co znamená atribut „s“ v oprávněních k souboru?

  2. Co znamená opt (jako v adresáři opt)? Je to zkratka?

  3. Co znamená „rc“ v „.bashrc“ atd.?

  1. Co znamená možnost sw v /etc/fstab?

  2. Co znamená název rozhraní eth0 v Linuxu?

  3. Co znamená ./ (lomítko) v linuxu?