Programm über ein Shell-Skript ausführen, sich aber nur als ein Prozess verhalten?

12

Gibt es eine Möglichkeit, eine Anwendung über ein Shell-Skript auszuführen, aber keinen anderen Prozess zu erstellen? Ich möchte, dass es nur wie ein Prozess aussieht . Es spielt keine Rolle, ob mein Shell-Skript durch einen neuen Prozess ersetzt wird oder ob es nach dem Ende einer aufgerufenen Anwendung fortgesetzt wird.
Dies sollte auch meine vorherige Frage lösen: /ubuntu/247632/is-there-a-way-to-associate-additional-application-launcher-with-an-app
Vielen Dank für Ihre Hilfe .

zubozrout
quelle

Antworten:

7

Sie können den folgenden execBefehl verwenden:

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

Beispiel:

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

Wie Sie sehen können, wird die Unterschale durch ersetzt echo.

Andrea Corbellini
quelle
Vielen Dank für Ihre Antwort. Ich kann zB folgendes ausführen: "exec -a Firefox gedit &" und so erscheint gedit in einem Launcher als Firefox. Bei den meisten Apps funktioniert dies jedoch nicht.
zubozrout
Das Problem liegt höchstwahrscheinlich in der Tatsache, dass obwohl ich einen neuen Prozess erstellt habe, beide Namen verwendet werden, der ursprüngliche und ein neu definierter. PS-Ausgabe: 1000 6151 0,0 0,0 13720 944 Punkte / 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
Darf ich fragen, warum Sie &am Ende Ihres Befehls verwenden? Dadurch wird der Befehl in einer Subshell ausgeführt, genau das, was Sie nicht möchten.
Andrea Corbellini
Ja, ich habe es nur im Terminal versucht, nicht in einem Shell-Skript.
Zubozrout
2
Also habe ich Ihre vorherige Frage gelesen und es sieht so aus, als würden Sie einige Dinge falsch verstehen. Sie verwechseln den Prozess mit dem nullten Argument mit der PID mit dem Dash Launcher . Und Sie stellen auch die falsche Frage. Was Sie zuerst fragen möchten, ist: Wie ordnet der Dash Starter Starter Prozessen zu? Sobald Sie die Antwort auf diese Frage gefunden haben, finden Sie auch eine Antwort auf Ihre ursprüngliche Frage.
Andrea Corbellini