En bash
puedes usar exec -a
y en zsh
alternativamente, también puede establecer ARGV0
para ejecutar un programa con un cierto argumento cero, pero ¿hay también una forma POSIX de hacerlo?
Como se sugiere en este comentario, podría crear un enlace simbólico (temporal) para lograr esto, pero de esta manera no pude establecer el nuevo valor del argumento cero en ningún valor realmente arbitrario, p. el comando con una cierta ruta absoluta. Entonces, ¿hay alguna otra solución?
Respuesta aceptada:
No, no hay forma de POSIX, aparte de compilar un programa C que lo haga. Como rápido y sucio:
$ 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
es compatible con ksh93
, bash
, zsh
, busybox ash
(desde la versión 1.27.0), yash
, mksh
(desde la versión r50e), el Schily Bourne Shell (desde agosto de 2015) es el más extendido entre los shells.
Probablemente lo más portátil sería recurrir a perl
que es más probable que esté disponible que un compilador de 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