Shell
是否有一種 POSIX 方法來設置目標應用程序的第零個參數?
在
bash
你可以使用exec -a
並且zsh
你也可以設置ARGV0
以執行具有某個第零參數的程序,但是還有一種 POSIX 方式嗎?正如這一評論中所建議的,您可以創建一個(臨時)符號連結來實現這一點,但這樣我就無法將新的第零個參數值設置為真正的任意值,例如具有某個絕對路徑的命令。那麼還有其他解決方案嗎?
不,除了編譯一個 C 程序之外,沒有 POSIX 方法。作為一個快速而骯髒的人:
$ echo 'int main(int c,char*v[]){ execvp(v[1],&v[2]);perror(v[1]);return 127;}'>r.c && make r $ ./r ps zzz -f UID PID PPID C STIME TTY TIME CMD chazelas 7412 7411 0 10:44 pts/4 00:00:00 /bin/zsh chazelas 21187 7412 0 22:33 pts/4 00:00:00 zzz -f
exec -a
受ksh93
,bash
,zsh
,busybox ash
(自 1.27.0 版起),yash
,mksh
(自 r50e 版起)、Schily Bourne Shell(自 2015 年 8 月起)支持,因此它是 shell 中最普遍的。最可移植的可能是求助於
perl
哪個比 C 編譯器更可能可用。$ perl -e 'exec {shift} @ARGV' ps zzz -f UID PID PPID C STIME TTY TIME CMD chazelas 7554 7411 0 10:58 pts/12 00:00:00 /bin/zsh chazelas 7630 7554 0 11:02 pts/12 00:00:00 zzz -f