Exécuter le programme à partir d'un script shell mais se comporter comme un seul processus?

12

Existe-t-il un moyen d'exécuter une application à partir d'un script shell sans créer un autre processus. Je veux que cela ressemble à un seul processus . Peu importe que mon script shell soit remplacé par un nouveau processus ou qu'il continue après la fin d'une application appelée.
Cela devrait également résoudre ma question précédente: /ubuntu/247632/is-there-a-way-to-associate-additional-application-launcher-with-an-app
Merci beaucoup pour votre aide .

zubozrout
la source

Réponses:

7

Vous pouvez utiliser la execcommande:

$ help exec
exec: exec [-cl] [-a name] [command [arguments ...]] [redirection ...]
    Replace the shell with the given command.

    Execute COMMAND, replacing this shell with the specified program.
    ARGUMENTS become the arguments to COMMAND.  If COMMAND is not specified,
    any redirections take effect in the current shell.

    Options:
      -a name   pass NAME as the zeroth argument to COMMAND
      -c        execute COMMAND with an empty environment
      -l        place a dash in the zeroth argument to COMMAND

    If the command cannot be executed, a non-interactive shell exits, unless
    the shell option `execfail' is set.

    Exit Status:
    Returns success unless COMMAND is not found or a redirection error occurs.

Exemple:

user@host:~$ PS1="supershell$ "
supershell$ bash
user@host:~$ PS1="subshell$ "
subshell$ exec echo hello
hello
supershell$ 

Comme vous pouvez le voir, le sous-shell est remplacé par echo.

Andrea Corbellini
la source
Merci pour votre réponse. Je peux exécuter par exemple ceci: "exec -a firefox gedit &" et ainsi gedit apparaît dans un lanceur comme Firefox. Mais cela ne fonctionne pas pour la majorité des applications.
zubozrout
Le problème réside très probablement dans le fait que, bien que j'aie créé un nouveau processus, il utilise les deux noms, l'original et le nouveau. Sortie PS: 1000 6151 0,0 0,0 13720 944 pts / 2 R + 10:49 0:00 grep --color = auto firefox | 10006153 0,0 0,0 13716 940 pts / 2 S + 10:49 0:00 grep --color = auto gedit
zubozrout
Puis-je vous demander pourquoi utilisez-vous &à la fin de votre commande? Cela exécutera la commande dans un sous-shell, ce qui est exactement ce que vous ne voulez pas .
Andrea Corbellini
Oui, je l'essayais juste dans le terminal, pas un script shell.
zubozrout
2
J'ai donc lu votre question précédente et il semble que vous compreniez mal certaines choses. Vous confondez le processus avec l' argument zéro avec le PID avec le lanceur de tirets . Et vous posez également la mauvaise question. Ce que vous voulez demander est d'abord: comment le tableau de bord associe-t-il les lanceurs aux processus? Une fois que vous avez trouvé la réponse à cette question, vous trouverez également une réponse à votre question d'origine.
Andrea Corbellini