LINUX.ORG.RU

mate(gnome)-terminal. Попытка открыть новое окно терминала и автоматически выполнить там пару команд (тред №3, финальный)

 , ,


1

2

Это вообще возможно? У меня не очень получается это сделать даже в штатном режиме. А на самом деле мне нужно запускать окно терминала через execvp (в Си++ коде) и получается совсем жуть: открывается новое окно терминала с непонятными настройками(судя по расцветке) и иксы начинают нещадно тормозить при таскании окна по экрану.

 1284 root      20   0 2234432 535812 398572 R 110.0   3.7   7:00.19 Xorg

Запускаю различные вариации параметров. Например так:

  mate-terminal --window -x cd /home/astahl/work && ls

Есть подозрение что mate-terminal это одна программа с кучей окон, которая сама постоянно форкается и там под капотом треш и угар.

Может кто знает как запустить новое окно mate-terminal и автоматически выполнить там какие-то команды?



Последнее исправление: Usruser (всего исправлений: 1)

execvp и запуск из шелла дадут одинаковый результат если всё правильно сделать. Но тестировать лучше и шелла.

mate-terminal --window -x cd /home/astahl/work && ls

Тут && будет не аргументом терминала а операцией шелла, то есть сначала запустится терминал с командой cd в нём, а потом (сам по себе) запустится ls.

А ещё, у меня нет и никогда не было mate-terminal'а, но подозреваю, что после выполнения cd он закроется, и чтобы этого не случалось - надо добавить туда что-нить, например sleep 10 или read.

Попробуй так:

mate-terminal --window -x 'cd /home/astahl/work ; ls ; sleep 10'
или так:
mate-terminal --window -x /bin/sh -c 'cd /home/astahl/work ; ls ; sleep 10'

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax
 There was an error creating the child process for this terminal

  Failed to execute child process “cd /home/astahl/work ; ls ; sleep 10”: Failed to execve: No such file or directory

Вот такое я вижу в основном. Новое окно терминала открывается, приглашения нет, ошибка выводится поверх окна.

А вот

 mate-terminal --window -x /bin/sh -c 'cd /home/astahl/work ; ls ; sleep 10'

отработал. Это уже шаг вперёд. И окно действительно закрылось после 10 секунд. Но мне оно нужно открытым. Есть идеи?

Я могу запустить что-то долгоиграющее вроде mc вместо sleep, но это не всегда будет приемлемо.

Можно sleep/mc заменить на bash. Тогда работает ожидаемым образом.

Usruser
() автор топика
Последнее исправление: Usruser (всего исправлений: 2)
Ответ на: комментарий от Usruser

Запусти read, он будет ждать пока энтер нажмёшь.

Или while true; do sleep 3600 ; done

А если ты знаешь про execvp() то неаверно не будет проблем запустить свою прогу вида

main() { while(1) sleep(1); }

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)
Ответ на: комментарий от firkax

Мне нужно в итоге получить действующий терминал. Не просто дать пользователю прочитать данные. Юзер потом будет работать с этим терминалом.

Usruser
() автор топика
Ответ на: комментарий от Usruser

Тогда запусти bash. И, подозреваю, можно даже прописать ему скрипт вместо bashrc где будут эти cd и ls.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.