Для повноти, ось кілька програм 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
. Велике дякую!