Shell

是否有一種 POSIX 方法來設置目標應用程序的第零個參數?

  • January 16, 2020

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 -aksh93, 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

引用自:https://unix.stackexchange.com/questions/250681