GNU/Linux >> Tutoriels Linux >  >> Linux

Façon Posix de définir l'argument zéro d'une application cible ?

Dans bash vous pouvez utiliser exec -a et en zsh vous pouvez également définir ARGV0 pour exécuter un programme avec un certain argument zéro, mais existe-t-il également une manière POSIX de le faire ?

Comme suggéré dans ce commentaire, vous pouvez créer un lien symbolique (temporaire) pour y parvenir, mais de cette façon, je ne pouvais pas définir la nouvelle valeur d'argument zéro sur une valeur réellement arbitraire, par exemple. la commande avec un certain chemin absolu. Existe-t-il une autre solution ?

Réponse acceptée :

Non, il n'y a pas de moyen POSIX, autre que de compiler un programme C qui le fait. Comme rapide et sale :

$ 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 est pris en charge par ksh93 , bash , zsh , busybox ash (depuis la version 1.27.0), yash , mksh (depuis la version r50e), le Schily Bourne Shell (depuis août 2015) est donc le plus répandu parmi les obus.

Le plus portable serait probablement de recourir à perl qui est plus susceptible d'être disponible qu'un compilateur 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. Est-ce que Rsync ~/foo Target/foo est identique à Rsync ~/foo/ Target/foo/?

  2. La méthode portable (posix) pour réaliser la substitution de processus ?

  3. Manuel du programmeur Posix Vs Manuel du programmeur Linux ?

  4. Quel Bash est en cours d'exécution ?

  5. Façon de mettre sur liste noire une application individuelle à partir de l'utilisation de barres de défilement superposées ?

Autorisations d'application Snap

Un excellent moyen de sauvegarder vos données dans Ubuntu Linux

Manière appropriée de référencer les fichiers relatifs à la racine de l'application dans Node.JS

Titre de l'application Qt

Obtenir une capture d'écran de l'application EGL DRM/KMS

Existe-t-il un moyen de voir l'arborescence d'exécution de systemd ?