Eseguire il programma da uno script di shell ma comportarsi come un solo processo?


12

Esiste un modo per eseguire un'applicazione da uno script di shell ma non creare un altro processo. Voglio che assomigli ad un solo processo . Non importa se il mio script di shell viene sostituito da un nuovo processo o se continuerà al termine di una chiamata applicazione.
Questo dovrebbe risolvere anche la mia domanda precedente: /ubuntu/247632/is-there-a-way-to-associate-additional-application-launcher-with-an-app
Grazie mille per il tuo aiuto .

Risposte:


7

Puoi usare il 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.

Esempio:

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

Come puoi vedere, la subshell è sostituita da echo.


La ringrazio per la risposta. Posso eseguire ad esempio questo: "exec -a firefox gedit &" e così gedit appare in un launcher come Firefox. Ma non funziona per la maggior parte delle app.
Zubozrout,

Molto probabilmente il problema è che, sebbene abbia creato un nuovo processo, utilizza entrambi i nomi, quello originale e quello appena definito. Uscita 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

Posso chiederti perché stai usando &alla fine del tuo comando? Ciò eseguirà il comando in una subshell, che è esattamente ciò che non si desidera.
Andrea Corbellini,

Sì, lo stavo solo provando nel terminale, non uno script di shell.
Zubozrout,

2
Quindi, ho letto la tua domanda precedente e sembra che tu abbia frainteso alcune cose. Stai confondendo il processo con l'argomento zeroth con PID con dash launcher . E stai anche facendo la domanda sbagliata. Quello che vuoi chiedere è prima di tutto: in che modo il trattino associa i launcher ai processi? Una volta trovata la risposta a quella domanda, troverai anche una risposta alla tua domanda originale.
Andrea Corbellini,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.