У меня есть следующий сценарий:
#!/bin/bash
xterm -e ' sh -c "$HOME/TEST/FirstAPP --test;" exec bash'
## script opens the xterm and stops until I press CTRL+C
while true; do
....
этот вопрос связан с этим вопросом
Почему сценарий останавливается в этом месте? Я должен был назвать xterm и выполнение и затем продолжить наличие кода выполнение FirstApp.
Я использовал терминал гнома без проблем.
Если Вы хотите, чтобы Ваш сценарий выполнил команду и затем продолжил выполняться, Вам нужна к бочке команда в фоновом режиме (&
, см. https://unix.stackexchange.com/a/159514/22222). Так, измените свой сценарий на:
#!/bin/bash
xterm -e 'sh -c "$HOME/TEST/FirstAPP --test;"' &
## script opens the xterm and stops until I press CTRL+C
while true; do
....
Это запустится xterm
управляйте в фоновом режиме, сохраняя терминал открытым и FirstAPP
выполнение, и затем продолжится на другие строки Вашего сценария.
Причина это работало с gnome-terminal
то, потому что, когда Вы работаете gnome-terminal
, это, по-видимому, разветвляется само, и возвраты управляют к оболочке, от которой Вы запустили его. Вы видите это с strace
:
$ strace -e clone gnome-terminal
clone(child_stack=0x7fef6e44db30, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7fef6e44e9d0, tls=0x7fef6e44e700, child_tidptr=0x7fef6e44e9d0) = 9534
clone(child_stack=0x7fef6dc4cb30, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7fef6dc4d9d0, tls=0x7fef6dc4d700, child_tidptr=0x7fef6dc4d9d0) = 9535
# watch_fast: "/org/gnome/terminal/legacy/" (establishing: 0, active: 0)
clone(child_stack=0x7fef6d391b30, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7fef6d3929d0, tls=0x7fef6d392700, child_tidptr=0x7fef6d3929d0) = 9540
# unwatch_fast: "/org/gnome/terminal/legacy/" (active: 0, establishing: 1)
# watch_established: "/org/gnome/terminal/legacy/" (establishing: 0)
+++ exited with 0 +++
Отметьте вызовы к clone
который, как объяснено в man clone
делает:
clone() creates a new process, in a manner similar to fork(2).
Так, в отличие от большинства программ, gnome-terminal
сделает клон из себя при запуске. Нормальный способ запустить что-то и затем продолжить что-то еще состоит в том, чтобы использовать &
запустить его в фоновом режиме.