Dla kompletności, oto niektóre programy C i C ++ do robienia tego, które ludzie już skompilowali.
Idąc za komentarzem, na który wskazujesz, twoją widoczną motywacją do poproszenia o „sposób POSIX” jest zrozumienie, w jaki sposób można osiągnąć ten sam cel za pomocą powłok takich jak powłoka Debian Almquist, powłoka MirBSD Korn (przed wersją R50e ), zwykła powłoka zgodna z Debian POSIX i inne powłoki, które nie mają rozszerzeń do ustawiania zerowego argumentu tak jak powłoki Bourne Again i Z. (Powłoka Korn '93 i powłoka Korn MirBSD od wersji R50e i późniejszej obsługują -a
opcję wbudowanych exec
poleceń.)
wykonać
Laurent Bercot użytkownikaexecline
wyposażony w exec
komendzie . Aby powielić przykład M. Chazelasa, należy mieć execline
skrypt taki jak
#! / command / execlineb -P
exec -a zzz ps -f
exec
Oczywiście Bercot to zwykłe zewnętrzne polecenie. Można więc uruchomić go ze skryptu powłoki Debian Almquist Shell. Aby nałożyć bieżący program powłoki, należy użyć powłoki exec
do nałożenia się na Bercot exec
, który z kolei ustawi zerowy argument i nakłada się na program docelowy:
exec / command / exec -a "$ argv0" printer.sh
nosh
Zestaw narzędzi nosh zawiera exec
polecenie. Aby zduplikować przykład M. Chazelasa, należy mieć nosh
skrypt taki jak
#! / bin / nosh
exec -a zzz ps -f
Chociaż jest to nosh
wbudowane, exec
jest to również dostępne jako zwykłe zewnętrzne polecenie. Można więc uruchomić go ze skryptu powłoki Debian Almquist Shell. Aby nałożyć bieżący program powłoki, należy użyć powłoki exec
do nałożenia zestawu narzędzi nosh exec
, co z kolei ustawi zerowy argument i nakłada się na program docelowy:
exec / usr / local / bin / exec -a "$ argv0" printer.sh
sprawca
Sprawca Wayne Marshall zawiera się runargv0
polecenie . To jest zwykłe polecenie zewnętrzne. Można więc uruchomić go ze skryptu powłoki Debian Almquist Shell. Aby nałożyć bieżący program powłoki, należy użyć powłoki exec
do nałożenia na zestaw narzędzi perp runargv0
, który z kolei ustawi zerowy argument i nakłada się na program docelowy:
exec runargv0 printer.sh "$ argv0"
Uruchom
Runit Gerrit Pape zawiera się chpst
polecenie . To jest zwykłe polecenie zewnętrzne. Można więc uruchomić go ze skryptu powłoki Debian Almquist Shell. Aby nałożyć bieżący program powłoki, należy użyć powłoki exec
do nałożenia na runit chpst
, co z kolei ustawi 0-ty argument i nakłada się na program docelowy:
exec chpst -b "$ argv0" printer.sh
runit
niechętnie się zwróciłemsystemd
, bardzo się cieszę, że się zapoznałemnosh
. Wielkie dzięki!