Per completezza, ecco alcuni programmi C e C ++ per fare ciò che le persone hanno già compilato.
Seguendo il commento a cui fai riferimento, la tua apparente motivazione per chiedere "un modo POSIX" di fare questo è sapere come si può raggiungere lo stesso scopo con shell come la shell Debian Almquist, la shell MirBSD Korn (prima della versione R50e ), la shell ordinaria conforme a POSIX Debian e altre shell che non hanno estensioni per l'impostazione del 0 ° argomento come hanno le shell Bourne Again e Z. (La shell Korn '93 e la shell Korn MirBSD dalla versione R50e in poi supportano -aun'opzione per i loro execcomandi integrati .)
execline
Laurent Bercotexecline arriva con un execcomando . Quindi per duplicare l'esempio di M. Chazelas si dovrebbe avere una execlinesceneggiatura come
#! / command / execlineb -P
exec -a zzz ps -f
Bercot execè un normale comando esterno, ovviamente. Quindi è possibile eseguirlo da uno script Debian Almquist Shell. Per sovrapporre il programma di shell corrente si utilizzerebbero quelli della shell execper sovrapporre Bercot exec, che a sua volta imposterebbe il 0 ° argomento e si sovrapporrebbe al programma di destinazione:
exec / command / exec -a "$ argv0" printer.sh
fare uno spuntino
Il set di strumenti di nosh include un execcomando. Per duplicare l'esempio di M. Chazelas si dovrebbe avere una noshsceneggiatura come
#! / Bin / nosh
exec -a zzz ps -f
Sebbene sia noshintegrato, execè accessibile anche come un normale comando esterno. Quindi è possibile eseguirlo da uno script Debian Almquist Shell. Per sovrapporre l'attuale programma di shell si dovrebbero usare le shell execper sovrapporre il set di strumenti di nosh exec, che a sua volta imposterebbe l'argomento 0 e si sovrapporrebbe al programma di destinazione:
exec / usr / local / bin / exec -a "$ argv0" printer.sh
perp
Il criminale di Wayne Marshall include un runargv0comando . Questo è un normale comando esterno. Quindi è possibile eseguirlo da uno script Debian Almquist Shell. Per sovrapporre il programma di shell corrente si dovrebbero usare le shell execper sovrapporre il set di strumenti di perp runargv0, che a sua volta imposterebbe l'argomento 0 e si sovrapporrebbe al programma di destinazione:
exec runargv0 printer.sh "$ argv0"
eseguirlo
La runit di Gerrit Pape include un chpstcomando . Questo è un normale comando esterno. Quindi è possibile eseguirlo da uno script Debian Almquist Shell. Per sovrapporre l'attuale programma di shell si dovrebbero usare le shell execper sovrapporre a runit chpst, che a sua volta imposterebbe l'argomento 0 e si sovrapporre al programma di destinazione:
exec chpst -b "$ argv0" printer.sh
runitrivolto con riluttanzasystemd, sono molto contento di essere presentatonosh. Grazie molto!