GNU/Linux >> Znalost Linux >  >> Linux

Jak nastavit volitelný parametr?

Zavřeno . Tato otázka je založena na názoru. Momentálně nepřijímá odpovědi.

Chcete zlepšit tuto otázku? Aktualizujte otázku, aby na ni bylo možné odpovědět pomocí faktů a citací úpravou tohoto příspěvku.

Zavřeno před 7 lety.


Vylepšete tuto otázku

Předpokládejme, že máte následující problém:

V závislosti na tom, zda je skript spuštěn v kanálu nebo ne, chcete připojit -print0 parametr find .

Napadají mě alespoň dva způsoby, jak to udělat:

[[ -p '/dev/stdin' ]] && local null_terminated='-print0'
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) "$null_terminated"

Nebo

    if [[ -p '/dev/stdin' ]]; then
        find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) -print0
    else
        find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" )
    fi

Existuje nějaký lepší způsob, jak to udělat? Otázka je pro bash , ale řešení pro jiné shelly nebo přenosné/standardní sh řešení by byla také vítána.

Přijatá odpověď:

První nebude fungovat jako $null_terminated je prázdný nebo není nastaven, find bude si stěžovat na ten prázdný argument navíc.

find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) $null_terminated

Fungovalo by to, ale pouze pokud by $null_terminated neobsahuje žádné zástupné znaky ani znaky z IFS.

Dělám to:

if [[ -p '/dev/stdin' ]]; then
  extra_args=(-print0)
else
  extra_args=()
fi

find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) "${extra_args[@]}"

nebude mít problém.

Bourne/POSIXly, můžete udělat:

set -- najít . ! -název . - prořezávat! ( "[e-mail chráněný]" )[ -p /dev/stdin ] &&set -- "[e-mail chráněný]" -exec printf '%s
Linux
  1. Jak používat FIND v Linuxu

  2. Jak nastavit reverzní proxy Nginx

  3. Jak nastavit Bittornado Tracker?

  1. Jak najít soubor v Linuxu

  2. Jak mohu přimět CMake, aby našel svou alternativní instalaci Boost?

  3. Jak zjistit stav wlan0?

  1. Linux / UNIX :Jak najít soubory, které mají nastaveno SUID/SGID

  2. Jak nastavím výchozí přezdívku pro nová připojení irssi?

  3. Jak zjistím číslo řádku v Bash, když došlo k chybě?