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ą -aopcję wbudowanych execpoleceń.)
wykonać
Laurent Bercot użytkownikaexecline wyposażony w execkomendzie . Aby powielić przykład M. Chazelasa, należy mieć execlineskrypt taki jak
#! / command / execlineb -P
exec -a zzz ps -f
execOczywiś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 execdo 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 execpolecenie. Aby zduplikować przykład M. Chazelasa, należy mieć noshskrypt taki jak
#! / bin / nosh
exec -a zzz ps -f
Chociaż jest to noshwbudowane, execjest 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 execdo 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ę runargv0polecenie . 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 execdo 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ę chpstpolecenie . 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 execdo 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
runitniechętnie się zwróciłemsystemd, bardzo się cieszę, że się zapoznałemnosh. Wielkie dzięki!