เพื่อความสมบูรณ์นี่คือโปรแกรม 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 จะมีสคริปต์เช่นexec
execline
#! / 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 และโอเวอร์เลย์ด้วยโปรแกรมเป้าหมาย:runargv0
exec
runargv0
exec runargv0 printer.sh "$ argv0"
runit
runit Gerrit Pape ของรวมถึงคำสั่ง นี่เป็นคำสั่งภายนอกทั่วไป ดังนั้นจึงสามารถเรียกใช้จากภายในสคริปต์ Debian Almquist Shell หากต้องการซ้อนทับโปรแกรมเชลล์ปัจจุบันหนึ่งจะใช้เชลล์เพื่อทับซ้อนกับ runit's ซึ่งจะตั้งค่าอาร์กิวเมนต์ที่ 0 และโอเวอร์เลย์ด้วยโปรแกรมเป้าหมาย:chpst
exec
chpst
exec chpst -b "$ argv0" printer.sh
runit
การเปิดอย่างไม่เต็มใจที่จะฉันดีใจมากที่จะได้รับการแนะนำให้รู้จักกับsystemd
nosh
ขอบคุณมาก!