Để đầy đủ, đây là một số chương trình C và C ++ để làm điều này mà mọi người đã biên dịch.
Đi theo lời bình luận mà bạn chỉ ra, động lực rõ ràng của bạn khi yêu cầu "một cách POSIX" để làm điều này là để biết làm thế nào người ta có thể đạt được kết thúc tương tự này với các vỏ như vỏ sò Debian Almquist, vỏ KBS MirBSD (trước phiên bản R50e ), shell Thông thường tuân thủ Debian POSIX và các shell khác không có phần mở rộng để đặt đối số thứ 0 như shell Bourne Again và Z shell. (Vỏ '93 Korn và vỏ KBS MirBSD từ phiên bản R50e trở đi, hỗ trợ -a
tùy chọn cho các exec
lệnh tích hợp của chúng.)
thực hiện
Laurent Bercotexecline
đi kèm với một exec
lệnh . Vì vậy, để sao chép ví dụ của M. Chazelas, người ta sẽ có một execline
kịch bản như
#! / lệnh / execlineb -P
thực hiện -a zzz ps -f
Bercot exec
là một lệnh bên ngoài thông thường, tất nhiên. Vì vậy, người ta có thể chạy nó từ trong tập lệnh Shell Almquist Shell. Để phủ lớp chương trình shell hiện tại, người ta sẽ sử dụng shell của exec
lớp phủ với Bercot exec
, do đó sẽ đặt đối số 0 và lớp phủ với chương trình đích:
exec / lệnh / exec -a "$ argv0" print.sh
quà vặt
Bộ công cụ nosh bao gồm một exec
lệnh. Để sao chép ví dụ của M. Chazelas, người ta sẽ có một đoạn nosh
script như
#! / bin / nosh
thực hiện -a zzz ps -f
Mặc dù nó là một nosh
built-in, đây exec
là cũng dễ tiếp cận như một lệnh bên ngoài bình thường. Vì vậy, người ta có thể chạy nó từ trong tập lệnh Shell Almquist Shell. Để phủ lớp chương trình shell hiện tại, người ta sẽ sử dụng shell của exec
lớp phủ với bộ công cụ nosh exec
, từ đó sẽ đặt đối số 0 và lớp phủ với chương trình đích:
exec / usr / local / bin / exec -a "$ argv0" print.sh
cá rô
Perp của Wayne Marshall bao gồm một runargv0
lệnh . Đây là một lệnh bên ngoài thông thường. Vì vậy, người ta có thể chạy nó từ trong tập lệnh Shell Almquist Shell. Để phủ lớp chương trình shell hiện tại, người ta sẽ sử dụng shell của exec
lớp phủ với bộ công cụ perp runargv0
, lần lượt sẽ đặt đối số 0 và lớp phủ với chương trình đích:
thực hiện máy in runargv0.sh "$ argv0"
runit
Runit của Gerrit Pape bao gồm một chpst
lệnh . Đây là một lệnh bên ngoài thông thường. Vì vậy, người ta có thể chạy nó từ trong tập lệnh Shell Almquist Shell. Để phủ lớp chương trình shell hiện tại, người ta sẽ sử dụng shell của exec
lớp phủ với runit chpst
, do đó sẽ đặt đối số 0 và lớp phủ với chương trình đích:
exec chpst -b "$ argv0" máy in.sh
runit
miễn cưỡng chuyển sangsystemd
, tôi rất vui khi được giới thiệunosh
. Cảm ơn nhiều!