Запустить программу из сценария оболочки, но вести себя как один процесс?

12

Есть ли способ, которым я могу выполнить приложение из сценария оболочки, но не создать другой процесс. Я хочу, чтобы это выглядело как один процесс . Не имеет значения, будет ли мой сценарий оболочки заменен новым процессом или он продолжится после завершения вызываемого приложения.
Это также должно решить мой предыдущий вопрос: /ubuntu/247632/is-there-a-way-to-associate-additional-application-launcher-with-an-app
Большое спасибо за вашу помощь ,

zubozrout
источник

Ответы:

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
Могу ли я спросить, почему вы используете &в конце вашей команды? Это запустит команду в подоболочке, а это именно то, что вам не нужно.
Андреа Корбеллини
Да, я просто пробовал это в терминале, а не в скрипте оболочки.
zubozrout
2
Итак, я прочитал ваш предыдущий вопрос, и похоже, что вы неправильно понимаете некоторые вещи. Вы путаете процесс с нулевым аргументом с PID с панелью запуска . И вы тоже задаете не тот вопрос. Сначала вы хотите спросить: как тире связывает средства запуска с процессами? Как только вы найдете ответ на этот вопрос, вы также найдете ответ на свой оригинальный вопрос.
Андреа Корбеллини