从Shell脚本运行程序,但仅表现为一个进程?


12

有没有一种方法可以从Shell脚本执行应用程序,但不能创建另一个进程。我只希望它看起来像一个过程。不管我的shell脚本是被新进程替换还是在被调用的应用程序结束后继续执行,都没有关系。
这也应该可以解决我之前的问题:https : //askubuntu.com/questions/247632/is-there-a-way-to-associate-additional-application-launcher-with-an-app
非常感谢您的帮助。

Answers:


7

您可以使用以下exec命令:

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

例:

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

如您所见,该子外壳由代替echo


谢谢您的回答。我可以运行例如:“ exec -a firefox gedit&”,因此gedit在启动器中显示为Firefox。但是它不适用于大多数应用程序。
zubozrout

问题很可能是因为尽管我创建了一个新进程,但它同时使用了名称,原始名称和新定义的名称。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 2013年

请问为什么&在命令末尾使用?这将在子shell中运行命令,而这正是您想要的。
Andrea Corbellini 2013年

是的,我只是在终端中尝试,而不是shell脚本。
zubozrout13年

2
因此,我阅读了您先前的问题,似乎您对某些事情误解了。你感到困惑的过程第0个参数PID破折号发射。而且您也提出了错误的问题。您首先要问的是:破折号如何将启动器与流程相关联?找到该问题的答案后,您还将找到原始问题的答案。
Andrea Corbellini 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.