Для повноти, ось кілька програм C і C ++ для цього, які люди вже склали.
Ідучи за коментарем, на який ви вказуєте, ваша очевидна мотивація просити "POSIX-спосіб" робити це - знати, як можна досягти цього самого кінця з оболонками, такими як оболонка Debian Almquist, оболонка MirBSD Korn (до версії R50e ), звичайна оболонка, сумісна з Debian POSIX, та інші оболонки, які не мають розширень для встановлення 0-го аргументу, як це мають оболонки Bourne Again та Z. (Оболонка Korn '93 та оболонка MirBSD Korn від версії R50e далі підтримують -aопцію для вбудованих execкоманд.)
виконувати
Лоран Bercot - хexecline поставляється з в execкоманді . Отже, для дублювання прикладу М. Шазеласа, був би такий execlineсценарій, як
#! / команда / execlineb -P
exec -a zzz ps -f
Беркот, execзвичайно, звичайна зовнішня команда. Таким чином, можна запустити його із сценарію оболонки Debian Almquist. Для накладання поточної програми оболонки використовуйте оболонку execдля накладання з Беркотом exec, що, в свою чергу, встановить 0-й аргумент та накладне на цільову програму:
exec / command / exec -a "$ argv0" printer.sh
ніш
Набір інструментів nosh включає execкоманду. Щоб дублювати приклад М. Шазеласа, був би такий noshсценарій, як
#! / бін / ніш
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для накладання runargv0набором інструментів perp , що, в свою чергу, встановить 0-й аргумент і накладне з цільовою програмою:
exec runargv0 printer.sh "$ argv0"
пробіг
Runit Gerrit Папа включає в chpstкоманду . Це звичайна зовнішня команда. Таким чином, можна запустити його із сценарію оболонки Debian Almquist. Для накладання поточної програми оболонки використовуйте оболонку execдля накладання з runit chpst, що, в свою чергу, встановить 0-й аргумент і накладне з цільовою програмою:
exec chpst -b "$ argv0" printer.sh
runitнеохоче зверталисяsystemd, я дуже радий, що мене познайомилиnosh. Велике дякую!