เพื่อความสมบูรณ์นี่คือโปรแกรม C และ C ++ สำหรับการทำสิ่งนี้ที่ผู้คนได้รวบรวมไว้ แล้ว
ตามความเห็นที่คุณชี้ไปแรงจูงใจที่ชัดเจนของคุณในการขอ "วิธี POSIX" ในการทำเช่นนี้คือการรู้ว่าเราจะบรรลุจุดสิ้นสุดแบบเดียวกันนี้ได้อย่างไรด้วยเชลล์เช่น Debian Almquist shell, MirBSD Korn shell (ก่อนรุ่น R50e ), เชลล์ธรรมดาที่สอดคล้องกับ Debian POSIX และเชลล์อื่น ๆ ที่ไม่มีส่วนขยายสำหรับการตั้งค่าอาร์กิวเมนต์ 0th เป็น Bourne Again และ Z shell ('93 Korn shell และ MirBSD Korn shell จากรุ่น R50e เป็นต้นไปรองรับ-aตัวเลือกexecคำสั่งในตัว)
execline
Laurent Bercot ของexeclineมาพร้อมกับคำสั่ง ดังนั้นเพื่อทำซ้ำตัวอย่างของ M. Chazelas จะมีสคริปต์เช่นexecexecline
#! / command / execlineb -P
exec -a zzz ps -f
แน่นอนว่า Bercot execนั้นเป็นคำสั่งจากภายนอกทั่วไป ดังนั้นจึงสามารถเรียกใช้จากภายในสคริปต์ Debian Almquist Shell ในการซ้อนทับโปรแกรมเชลล์ปัจจุบันหนึ่งจะใช้เชลล์execเพื่อซ้อนทับด้วย Bercot execซึ่งจะตั้งค่าอาร์กิวเมนต์ 0 และโอเวอร์เลย์ด้วยโปรแกรมเป้าหมาย:
exec / command / exec -a "$ argv0" printer.sh
Nosh
ชุดเครื่องมือ noshมีexecคำสั่ง หากต้องการทำซ้ำตัวอย่างของ M. Chazelas จะมีnoshสคริปต์เช่น
#! / bin / Nosh
exec -a zzz ps -f
แม้ว่ามันจะเป็นnoshในตัวนี้execเป็นยังสามารถเข้าถึงได้เป็นคำสั่งภายนอกสามัญ ดังนั้นจึงสามารถเรียกใช้จากภายในสคริปต์ Debian Almquist Shell ในการซ้อนทับโปรแกรมเชลล์ปัจจุบันเราจะใช้เชลล์execเพื่อซ้อนทับกับชุดเครื่องมือ nosh execซึ่งจะตั้งค่าอาร์กิวเมนต์ที่ 0 และโอเวอร์เลย์ด้วยโปรแกรมเป้าหมาย:
exec / usr / local / bin / exec -a "$ argv0" printer.sh
perp
perp เวย์นมาร์แชลล์รวมถึงคำสั่ง นี่เป็นคำสั่งภายนอกทั่วไป ดังนั้นจึงสามารถเรียกใช้จากภายในสคริปต์ Debian Almquist Shell หากต้องการวางทับโปรแกรมเชลล์ปัจจุบันหนึ่งจะใช้เชลล์เพื่อซ้อนทับกับชุดเครื่องมือ perp ซึ่งจะตั้งค่าอาร์กิวเมนต์ที่ 0 และโอเวอร์เลย์ด้วยโปรแกรมเป้าหมาย:runargv0execrunargv0
exec runargv0 printer.sh "$ argv0"
runit
runit Gerrit Pape ของรวมถึงคำสั่ง นี่เป็นคำสั่งภายนอกทั่วไป ดังนั้นจึงสามารถเรียกใช้จากภายในสคริปต์ Debian Almquist Shell หากต้องการซ้อนทับโปรแกรมเชลล์ปัจจุบันหนึ่งจะใช้เชลล์เพื่อทับซ้อนกับ runit's ซึ่งจะตั้งค่าอาร์กิวเมนต์ที่ 0 และโอเวอร์เลย์ด้วยโปรแกรมเป้าหมาย:chpstexecchpst
exec chpst -b "$ argv0" printer.sh
runitการเปิดอย่างไม่เต็มใจที่จะฉันดีใจมากที่จะได้รับการแนะนำให้รู้จักกับsystemdnoshขอบคุณมาก!