Как я могу создать скрипт, который открывает окна терминала и выполняет в них команды?

113

У меня есть три сценария, которые мне нужно запустить, когда я запускаю свою машину Ubuntu, они запускают службы, которые я использую в своей среде разработки.

Для этого я вручную открываю три терминала и набираю команды.

Есть ли способ создать скрипт, который откроет три терминала и выполнит одну команду в каждом из них? (Каждая команда должна находиться в отдельном окне терминала, чтобы я мог видеть их вывод).

    
задан JSBach 02.06.2011 в 19:58
источник

5 ответов

116
gnome-terminal -e command

или

xterm -e command

или

konsole -e command

В значительной степени

terminal -e command

Чтобы терминал оставался при выходе команды:

В консоли есть флаг --noclose .

В xterm существует флаг -hold .

В gnome-terminal перейдите в Изменить - > Настройки профиля - > Название . Перейдите на вкладку Command . Выберите Удерживайте терминал в выпадающем меню с надписью Когда команда выходит из . Вы должны создать для него новый профиль и выполнить с помощью

gnome-terminal --window-with-profile=NAMEOFTHEPROFILE -e command
    
ответ дан nickguletskii 02.06.2011 в 20:03
источник
48

Вместо жесткого кодирования gnome-terminal , konsole и т. д. используют систему Alternatives. Программа, которая выполняет эмулятор терминала по умолчанию:

x-terminal-emulator

В моей системе каждый раз, когда я выполняю эту команду, он открывает новый экземпляр Konsole.

К счастью, терминалы, похоже, поддерживают параметр -e для выполнения команды (я проверил ее для konsole и gnome-terminal ). Аргументы после команды передаются вызываемой команде. Бэш отказывается оставаться открытым в моем терминале, для получения терминала необходим дополнительный скрипт:

#!/bin/sh
"$@"
exec "$SHELL"

Если вы сохранили предыдущий скрипт как /home/user/hacky и сделали его исполняемым, вы запустили бы свои скрипты с помощью:

x-terminal-emulator -e /home/user/hacky your-script optional arguments here

Требуется полный путь и /home/user/hacky должен быть выполнен.

Моя предыдущая попытка запустить скрипт в новом окне терминала можно найти в версии № 2 , это было до Я понял, что аргументы могут быть переданы в x-terminal-emulator .

    
ответ дан Lekensteyn 02.06.2011 в 20:29
8

Довольно просто -

#!/bin/bash

/etc/init.d/ccpd status

Этого достаточно для других команд, которые не должны отображать что-либо в терминале. Но здесь нужно увидеть отображаемый статус.
Таким образом, он должен работать в окне терминала

#!/bin/bash

gnome-terminal -e "/etc/init.d/ccpd status"  --window-with-profile=NAMEOFTHEPROFILE

В другом сообщении предполагалось, что [] будет заполнителем

Здесь «NAMEOFTHEPROFILE» следует заменить именем профиля, который «удерживает терминал при выходе команды».

    
ответ дан Karthik T 23.01.2013 в 09:31
1

комментируя ответ Лекенштейна. Я знаю, что это старый пост, но для тех, кто считает это полезным (как я и сделал) Вместо того, чтобы сделать еще один «хакерский скрипт», просто включив функцию внутри скрипта, вы вызываете

hacky_function()
{
"$@"
exec "$SHELL"
}

Вызовите свой скрипт с помощью «x-terminal-emulator -e / path / to / script hacky_function дополнительных аргументов здесь»

Не забудьте поставить «$ @» в конце скрипта

    
ответ дан Sruli 06.12.2017 в 20:11
-2

Используйте команду экрана и -d отсоединить от существующего сеанса экрана и снова подключиться -m заставить новый сеанс экрана -S создать именованный сеанс вместо использования имени по умолчанию

    
ответ дан Jack Heath 13.04.2014 в 20:00

Ознакомьтесь с другими вопросами по меткам