Ваш:
$(startBasics)
не имеет смысла и является причиной вашей проблемы. Это подмена команды. $ (cmd)
расширяется до вывода cmd
(с удалением завершающих символов новой строки и при условии разделения + glob, поскольку вы не цитировали его). Вы просите оболочку составить команду из вывода startBasics
.
Это означает, что оболочке необходимо читать вывод startBasics
до конца файла, чтобы развернуть его. Это расширение здесь будет восприниматься как команда для выполнения, что не имеет большого смысла.
Чтобы добиться подстановки команд, оболочка запускает startBasics
со своим stdout, перенаправленным в канал, и читает с другого конца канала. Все процессы gnome-terminal
наследуют этот стандартный вывод.
Оболочка увидит eof на другом конце конвейера только тогда, когда все файловые дескрипторы, открытые до конца записи (во всех процессах), закрыты. Это, вероятно, произойдет только тогда, когда все gnome-terminal
, запущенные startBasics
, будут завершены.
Здесь вы хотите:
#!/bin/sh -
startBasics() {
gnome-terminal -e "sth" &
gnome-terminal --tab -e "sth_else" &
}
doOneThing() {
gnome-terminal --working-directory=/myDir1/build/ -e './myExecutable1' &
}
doAnoterThing() {
gnome-terminal --working-directory=/myDir2/build/ -e './myExecutable2' &
}
startBasics
doOneThing
doAnoterThing
wait # if you'd rather wait for all those processes to finish
# before exiting.
После долгих поисков я нашел ответ в сообщении об ошибках Debian на бирже:
If the okular package is not installed, kile can not start and crashes on a segmentation fault.
Решение состояло в том, чтобы запустить
sudo apt-get install okular
В Ubuntu 18.04 была аналогичная ошибка, и я использовал один из этих обходных путей.