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.