Для полноты, вот несколько программ на C и C ++ для этого, которые люди уже скомпилировали.
Судя по комментарию, на который вы указываете, ваша очевидная мотивация для запроса «способа POSIX» заключается в том, чтобы знать, как можно достичь того же результата с помощью оболочек, таких как оболочка Debian Almquist, оболочка MirBSD Korn (до версии R50e). ), Debian POSIX-совместимая обычная оболочка и другие оболочки, которые не имеют расширений для установки 0-го аргумента, как в оболочках Bourne Again и Z. (Оболочка Korn '93 и оболочка MirBSD Korn начиная с версии R50e поддерживают -aопцию для своих встроенных execкоманд.)
execline
Лоран Bercot - хexecline поставляется с в execкоманде . Таким образом, чтобы дублировать пример М. Чазеласа, нужно иметь такой execlineсценарий, как
#! / command / execlineb -P
exec -a zzz ps -f
Конечно, Bercot exec- это обычная внешняя команда. Таким образом, его можно запустить из сценария оболочки Debian Almquist. Чтобы наложить текущую программу оболочки, execнужно использовать оболочки для наложения с помощью Bercot exec, который, в свою очередь, установит 0-й аргумент и наложит на целевую программу:
exec / command / exec -a "$ argv0" printer.sh
перекус
В набор инструментов nosh входит execкоманда. Чтобы дублировать пример М. Чазеласа, можно было бы noshнаписать такой сценарий, как
#! / Bin / перекус
exec -a zzz ps -f
Хотя это noshвстроенная функция, execона также доступна в виде обычной внешней команды. Таким образом, его можно запустить из сценария оболочки Debian Almquist. Чтобы наложить текущую программу оболочки, execнужно использовать оболочки для наложения на набор инструментов nosh exec, который, в свою очередь, установит 0-й аргумент и наложит на целевую программу:
exec / usr / local / bin / exec -a "$ argv0" printer.sh
преступник
Уэйн Маршалл преступник в включает в runargv0команду . Это обычная внешняя команда. Таким образом, его можно запустить из сценария оболочки Debian Almquist. Чтобы наложить текущую программу оболочки, execнужно использовать оболочки для наложения на набор инструментов perp runargv0, который, в свою очередь, установит 0-й аргумент и наложит на целевую программу:
exec runargv0 printer.sh "$ argv0"
запустить его
Рунит Геррита Папе включает вchpst себя команду . Это обычная внешняя команда. Таким образом, его можно запустить из сценария оболочки Debian Almquist. Чтобы наложить текущую программу оболочки, execнужно использовать оболочки для наложения с помощью runit chpst, что, в свою очередь, установит 0-й аргумент и наложение на целевую программу:
exec chpst -b "$ argv0" printer.sh
runitнеохотно повернулсяsystemd, я очень рад, что меня представилиnosh. Большое спасибо!