GNU/Linux >> Znalost Linux >  >> Linux

K čemu slouží argument `jméno` k `sh -c`?

Převzato z manuálové stránky FreeBSD na sh (protože je to nejpohodlnější online, cílová platforma je Debian, pokud na tom záleží):

SH(1)           FreeBSD General Commands Manual          SH(1)

NAME
     sh -- command interpreter (shell)

SYNOPSIS
     sh [-/+abCEefhIimnPpTuVvx] [-/+o longname] [script [arg ...]]
     sh [-/+abCEefhIimnPpTuVvx] [-/+o longname] -c string [name [arg ...]]
     sh [-/+abCEefhIimnPpTuVvx] [-/+o longname] -s [arg ...]
...

Zvláště mě zajímá případ použití:

sh [-/+abCEefhIimnPpTuVvx] [-/+o longname] -c string [name [arg ...]]

Příklad:

# Normal:
myscript hello world
myscript hello world >/var/log/myscript.combined 2>&1

# Constrained:
#  - Arguments 'hello' and 'world' are suffixed by calling program.
myscript >/var/log/myscript.combined 2>&1 hello world

# Constrained Further:
#  - Wrapped in `sh` to catch system messages, like Segmentation Fault

sh -c 'myscript [email protected]' _ >/var/log/myscript.combined 2>&1 hello world

Všiml jsem si, že první argument nebyl předán do myscript a dokumentace odkazuje na name parametr, u kterého jsem neviděl sekci doc. V mém příkladu jsem přidal reklamu _ místo argumentu názvu, ale:

Co mám vyplnit pro name ?

Přijatá odpověď:

Formulář:

sh -c '...' name arg1 arg2 ...

se nazývá inline-script, často se vyskytuje v kombinaci s find ... -exec sh -c '...' find-sh {} + . Uvnitř vloženého skriptu $0 bude nastaveno na name a zbytek argumentů byl vyplněn na [email protected] .

Obecně byste jej měli nastavit na něco smysluplného, ​​protože se bude používat například k zobrazování chybových zpráv:

sh -c 'echo "${1?}"' foo
foo: 1: foo: 1: parameter not set

Můžete ale nastavit name na libovolné slovo, které chcete, pro označení názvu vloženého skriptu:

sh -c 'printf "%sn" "$0"' custom-sh 1 2 3
custom-sh

Toto chování je definováno POSIX.


Linux
  1. Jaký je nejlepší způsob distribuce binární aplikace pro Linux?

  2. Jak přiřadit název obrazovce?

  3. MegaCli:Získejte název zařízení /dev/sd* pro logickou jednotku

  1. 8 tipů pro příkazový řádek Linuxu

  2. Jaký je rozdíl mezi Sudo Su – a Sudo Su –?

  3. Linux – jaký je výchozí soubor pro `hostname`?

  1. Co definuje maximální velikost pro jeden příkazový argument?

  2. Need For The `builtin` Builtin?

  3. Zapnutí LAMP:Clapper pro vývojáře