¿Ejecuta el programa desde un script de shell pero se comporta como un solo proceso?


12

¿Hay alguna manera de ejecutar una aplicación desde un script de shell pero no crear otro proceso? Quiero que se vea como un solo proceso . No importa si mi script de shell se reemplaza por un nuevo proceso o si continuará después de que finalice una aplicación llamada.
Esto también debería resolver mi pregunta anterior: /ubuntu/247632/is-there-a-way-to-associate-additional-application-launcher-with-an-app
Muchas gracias por su ayuda .

Respuestas:


7

Puedes usar el execcomando:

$ 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.

Ejemplo:

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

Como puede ver, la subshell se reemplaza por echo.


Gracias por su respuesta. Puedo ejecutar, por ejemplo, esto: "exec -a firefox gedit &" y gedit aparece en un lanzador como Firefox. Pero no funciona para la mayoría de las aplicaciones.
zubozrout

Lo más probable es que el problema esté en el hecho de que, aunque creé un nuevo proceso, usa ambos nombres, el original y uno recién definido. Salida 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 13716940 pts / 2 S + 10:49 0:00 grep --color = auto gedit
zubozrout

¿Puedo preguntar por qué estás usando &al final de tu comando? Eso ejecutará el comando en una subshell, que es exactamente lo que no desea.
Andrea Corbellini

Sí, solo lo intentaba en la terminal, no en un script de shell.
zubozrout

2
Entonces, leí tu pregunta anterior y parece que estás malinterpretando algunas cosas. Está confundiendo el proceso con el argumento cero con PID con el iniciador de guiones . Y también estás haciendo la pregunta equivocada. Lo que quiere preguntar es primero: ¿cómo asocia el tablero los lanzadores a los procesos? Una vez que encuentre la respuesta a esa pregunta, también encontrará una respuesta a su pregunta original.
Andrea Corbellini
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.