1

默认情况下,bash 在调用程序时将可执行文件名作为第一个(更准确地说是 0)参数传递

调用程序是否有任何特殊形式可用于传递 0 参数?

它对于根据调用位置以不同方式运行的程序非常有用

4

1 回答 1

3

我认为设置参数 0 的唯一方法是更改​​可执行文件的名称。例如:

$ echo 'echo $0' > foo.sh
$ ln foo.sh bar.sh
$ sh foo.sh
foo.sh
$ sh bar.sh
bar.sh

一些 shell 对命令具有非 POSIX 扩展exec,允许您指定备用值:

$ exec -a specialshell bash
$ echo $0
specialshell

除了在子shell中运行之外,我不知道有类似的技术可以像这样更改子进程的名称

$ ( exec -a subshell-bash bash )

更新:三秒钟后,我在http://cr.yp.to/ucspi-tcp/argv0.htmlargv0找到了该命令。

于 2013-03-19T16:54:20.513 回答