Para completar, aqui estão alguns programas em C e C ++ para fazer isso que as pessoas já compilaram.
Seguindo o comentário que você aponta, sua aparente motivação para pedir "uma maneira POSIX" de fazer isso é saber como se pode alcançar esse mesmo fim com shells como o shell Debian Almquist, o shell MirBSD Korn (antes da versão R50e ), o shell Ordinário compatível com Debian POSIX e outros shells que não possuem extensões para definir o argumento 0 como os shells Bourne Again e Z possuem. (O shell Korn '93 e o MirBSD Korn da versão R50e em diante suportam uma -aopção para seus execcomandos internos .)
execline
Laurent Bercotexecline vem com um execcomando . Então, para duplicar o exemplo de M. Chazelas, seria necessário um execlinescript como
#! / command / execlineb -P
exec -a zzz ps -f
O Bercot execé um comando externo comum, é claro. Portanto, pode-se executá-lo a partir de um script Debian Almquist Shell. Para sobrepor o programa de shell atual, seria usado o shell execpara sobrepor ao Bercot exec, que por sua vez definiria o 0º argumento e sobreporia ao programa de destino:
exec / comando / exec -a "$ argv0" printer.sh
nosh
O conjunto de ferramentas nosh inclui um execcomando. Para duplicar o exemplo de M. Chazelas, seria necessário um noshscript como
#! / bin / nosh
exec -a zzz ps -f
Embora seja noshinterno, tambémexec é acessível como um comando externo comum. Portanto, pode-se executá-lo a partir de um script Debian Almquist Shell. Para sobrepor o atual programa de shell, usaria o shell para sobrepor-se ao conjunto de ferramentas nosh , que por sua vez definiria o 0º argumento e sobrepor-se ao programa de destino:execexec
exec / usr / local / bin / exec -a "$ argv0" printer.sh
criminoso
O criminoso de Wayne Marshall inclui um runargv0comando . Este é um comando externo comum. Portanto, pode-se executá-lo a partir de um script Debian Almquist Shell. Para sobrepor o programa de shell atual, seria usado o shell execpara sobrepor-se ao conjunto de ferramentas perp runargv0, que por sua vez definiria o 0º argumento e sobrepor-se ao programa de destino:
exec runargv0 printer.sh "$ argv0"
executá-lo
O runit de Gerrit Pape inclui um chpstcomando . Este é um comando externo comum. Portanto, pode-se executá-lo a partir de um script Debian Almquist Shell. Para sobrepor o programa de shell atual, usaria o shell execpara sobrepor aos runit chpst, que por sua vez definiriam o 0º argumento e sobreporiam ao programa de destino:
exec chpst -b "$ argv0" printer.sh
runitrelutantemente procuradosystemd, fico muito feliz em ser apresentadonosh. Muito Obrigado!