Executar programa a partir de um script de shell, mas se comportar como um único processo?

12

Existe uma maneira de executar um aplicativo a partir de um script de shell, mas não criar outro processo. Quero que pareça apenas um processo . Não importa se meu script de shell é substituído por um novo processo ou se continuará após o término de um aplicativo chamado.
Isso também deve resolver minha pergunta anterior: /ubuntu/247632/is-there-a-way-to-associate-additional-application-launcher-with-an-app
Muito obrigado por sua ajuda .

zubozrout
fonte

Respostas:

7

Você pode usar o 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.

Exemplo:

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

Como você pode ver, o subshell é substituído por echo.

Andrea Corbellini
fonte
Obrigado pela sua resposta. Eu posso executar, por exemplo, o seguinte: "exec -a firefox gedit &" e, portanto, o gedit aparece em um iniciador como o Firefox. Mas isso não funciona para a maioria dos aplicativos.
precisa saber é o seguinte
O problema provavelmente está no fato de que, embora eu tenha criado um novo processo, ele usa os dois nomes, o original e o recém-definido. Saída 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 perguntar por que você está usando &no final do seu comando? Isso executará o comando em um subshell, exatamente o que você não deseja.
Andrea Corbellini
Sim, eu estava apenas tentando no terminal, não um script de shell.
Zubozrout 26/01
2
Então, li sua pergunta anterior e parece que você está entendendo errado algumas coisas. Você está confundindo processo com argumento zero com PID com lançador de traços . E você também está fazendo a pergunta errada. O que você deseja perguntar é o primeiro: como o traço associa os lançadores aos processos? Depois de encontrar a resposta para essa pergunta, você também encontrará uma resposta para sua pergunta original.
Andrea Corbellini 26/01