默认情况下,bash 在调用程序时将可执行文件名作为第一个(更准确地说是 0)参数传递
调用程序是否有任何特殊形式可用于传递 0 参数?
它对于根据调用位置以不同方式运行的程序非常有用
默认情况下,bash 在调用程序时将可执行文件名作为第一个(更准确地说是 0)参数传递
调用程序是否有任何特殊形式可用于传递 0 参数?
它对于根据调用位置以不同方式运行的程序非常有用
我认为设置参数 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
找到了该命令。