V bash můžete použít exec -a a v zsh alternativně můžete také nastavit ARGV0 spustit program s určitým nultým argumentem, ale existuje také způsob POSIX, jak to udělat?
Jak je navrženo v tomto jednom komentáři, můžete vytvořit (dočasný) symbolický odkaz, abyste toho dosáhli, ale tímto způsobem jsem nemohl nastavit hodnotu nového nultého argumentu na skutečně jakoukoli libovolnou hodnotu, např. příkaz s určitou absolutní cestou. Existuje tedy nějaké jiné řešení?
Přijatá odpověď:
Ne, neexistuje žádný způsob POSIX, kromě kompilace programu C, který to dělá. Jako rychlý a špinavý:
$ 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 je podporován ksh93 , bash , zsh , busybox ash (od verze 1.27.0), yash , mksh (od verze r50e), Schily Bourne Shell (od srpna 2015) je tak nejrozšířenější mezi mušlemi.
Pravděpodobně nejpřenosnější by bylo uchýlit se k perl který je pravděpodobněji dostupný než kompilátor 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