Czy uruchomić program ze skryptu powłoki, ale zachowywać się jak jeden proces?

12

Czy istnieje sposób, w jaki mogę uruchomić aplikację ze skryptu powłoki, ale nie utworzyć innego procesu? Chcę, żeby wyglądało to jak jeden proces . Nie ma znaczenia, czy mój skrypt powłoki zostanie zastąpiony nowym procesem, czy będzie kontynuowany po zakończeniu wywoływanej aplikacji.
To powinno również rozwiązać moje poprzednie pytanie: /ubuntu/247632/is-there-a-way-to-associate-additional-application-launcher-with-an-app
Dziękuję bardzo za pomoc .

zubozrout
źródło

Odpowiedzi:

7

Możesz użyć execpolecenia:

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

Przykład:

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

Jak widać, podpowłoka jest zastępowana przez echo.

Andrea Corbellini
źródło
Dziękuję za Twoją odpowiedź. Mogę uruchomić np .: „exec -a firefox gedit &”, a więc gedit pojawia się w programie uruchamiającym jako Firefox. Ale to nie działa w przypadku większości aplikacji.
zubozrout
Problem najprawdopodobniej polega na tym, że chociaż stworzyłem nowy proces, używa on obu nazw, oryginalnej i nowo zdefiniowanej. Wyjście PS: 1000 6151 0,0 0,0 13720 944 pkt / 2 R + 10:49 0:00 grep - kolor = auto firefox | 10006153 0,0 0,0 13716 940 pkt / 2 S + 10:49 0:00 grep - kolor = automatyczna
edycja
Czy mogę zapytać, dlaczego używasz &na końcu polecenia? Spowoduje to uruchomienie polecenia w podpowłoce, co jest dokładnie tym, czego nie chcesz.
Andrea Corbellini,
Tak, tylko próbowałem tego w terminalu, a nie w skrypcie powłoki.
zubozrout
2
Czytam więc twoje poprzednie pytanie i wygląda na to, że nie rozumiesz niektórych rzeczy. Mylisz proces z zerowym argumentem z PID z programem uruchamiającym kreskę . Zadajesz też niewłaściwe pytanie. Najpierw musisz zapytać: w jaki sposób myślnik kojarzy programy uruchamiające z procesami? Gdy znajdziesz odpowiedź na to pytanie, znajdziesz również odpowiedź na swoje pierwotne pytanie.
Andrea Corbellini,