GNU/Linux >> Tutoriales Linux >  >> Linux

¿Posix Way de establecer el argumento cero de una aplicación de destino?

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

Linux
  1. ¿La forma portátil (posix) de lograr la sustitución de procesos?

  2. Configuración del nombre de host en Docker Compose

  3. ¿Cuál es el significado de POSIX?

  4. ¿Hay alguna manera de 'uniq' por columna?

  5. Perfilado de aplicaciones de Linux

Permisos de aplicaciones instantáneas

Una gran manera de hacer una copia de seguridad de sus datos en Ubuntu Linux

¿Qué Bash se está ejecutando?

¿Qué forma de incluir en la lista negra una aplicación individual mediante el uso de barras de desplazamiento superpuestas?

¿Cuál es la mejor manera de distribuir una aplicación binaria para Linux?

Forma correcta de hacer referencia a archivos relativos a la raíz de la aplicación en Node.JS