У меня есть три сценария, которые мне нужно запустить при запуске компьютера с Ubuntu, они запускают службы, которые я использую в своей среде разработки.
Для этого я вручную открываю три терминала и набираю команды.
Есть ли способ создать скрипт, который откроет три терминала и выполнит одну команду в каждом из них? (Каждая команда должна быть в отдельном окне терминала, чтобы я мог видеть их вывод).
command-line
scripts
services
И.С.Бах
источник
источник
gnome-terminal -e command
работает только еслиcommand
цитируется. Так что это не работает:gnome-terminal -e "echo hello world; sleep 3"
но это делает:gnome-terminal -e "bash -c 'echo hello world; sleep 3'"
. Вздох.; $SHELL
в конец команды. Пример:gnome-terminal --tab --title="test" --command="bash -c 'cd /etc; ls; $SHELL'"
Вместо жесткого программирования
gnome-terminal
,konsole
и так далее, используйте систему Альтернатив. Программа, которая выполняет эмулятор терминала по умолчанию:В моей системе он открывает новый экземпляр Konsole каждый раз, когда я выполняю эту команду.
К счастью, терминалы, кажется, поддерживают
-e
опцию для выполнения команды (я проверил это дляkonsole
иgnome-terminal
). Аргументы после команды передаются вызываемой команде. Bash отказывается оставаться открытым в моем терминале, для получения терминала необходим дополнительный скрипт:Если вы сохранили предыдущий скрипт как
/home/user/hacky
и сделали его исполняемым, вы должны запустить свои скрипты с:Полный путь обязателен и
/home/user/hacky
должен быть исполняемым.Моя предыдущая попытка запустить скрипт в новом окне терминала была найдена в ревизии # 2 , это было до того, как я понял, что аргументы могут быть переданы
x-terminal-emulator
.источник
bash
) или иметь такую строку, какread -p "Press Return to continue"
.cd xxx && start.sh
. Интерпретатор видит && как вторую часть команды (что логично), но если я кавычу, то он пытается выполнить все это как один большой аргументДовольно просто-
Этого достаточно для других команд, которым не нужно ничего отображать в терминале. Но здесь нужно видеть отображаемый статус.
Таким образом, он должен работать в окне терминала
Другой пост предназначен
[]
для заполненияЗдесь «NAMEOFTHEPROFILE» должен быть заменен именем профиля, который «удерживает терминал при выходе из команды».
источник
[]
был просто заполнителем--window-with-profile=NAMEOFTHEPROFILE
к тому, что я далС учетом ответа @ nickguletskii и моего собственного комментария под его ответом, а также вдохновленного комментариями @ grabantot моего комментария, вот мой предпочтительный способ сделать это, особенно когда я хочу, чтобы терминал оставался открытым, чтобы затем я мог использовать его вручную.
Ex. Использование: это действительно полезно добавить в ваши автозагрузки, чтобы этот скрипт запускался, открывал терминал, создавал и называл вкладку в терминале и запускал команду для вас. Или вы можете просто добавить символическую ссылку на этот скрипт на рабочий стол. Я использую этот тип подхода, поэтому я могу дважды щелкнуть один значок на рабочем столе и открыть для него несколько терминалов (с различными вкладками, названными в соответствии с тем, что я собираюсь сделать в них) и программами для настройки. моя среда программирования, например, для повседневной работы.
Вот надуманный пример, который открывает одну вкладку, называет ее «test», а затем запускает в ней простую команду
cd /etc; ls
.$SHELL
Часть в конце заставляет оболочку оставаться открытыми , так что вы можете увидеть его выход и продолжать использовать его (я узнал об этом где - то еще на переполнение стека):Вот более сложный пример, который открывает 3 отдельные вкладки в одном терминале gnome. Это именно то, что делает мой ярлык на рабочем столе, чтобы я мог сразу открыть несколько окон программирования:
Вот разбивка этой команды выше:
gnome-terminal
= открыть терминал гнома--tab
= открыть уникальную вкладку для того, что будет дальше--title="tab 1"
= название этой вкладки "вкладка 1"--command="bash -c 'cd /etc; ls; $SHELL'"
= запуститьbash -c 'cd /etc; ls; $SHELL'
команду, которую я только что составил в качестве примера; вот что он делает:bash -c
говорит, что это bash 'c'ommandcd /etc
= 'c'hange' d'irectory в путь "/ etc"ls
= 'l'i's Содержимое этого каталога$SHELL
= этот загадочный лакомый кусочек необходим, чтобы держать оболочку открытой, чтобы вы могли с ней работать. Если вы хотите, чтобы оболочка открылась, выполните команду, затем закройте, просто удалите эту часть. Я, однако, хочу, чтобы вкладка оставалась открытой, чтобы я мог заниматься магией программирования. :)--tab
части, чтобы создать вкладку 2, а затем снова за вкладку 3. Настройте по своему вкусу.Скриншот:
источник
комментируя ответ Лекенштейна. Я знаю, что это старый пост, но для тех, кто находит это полезным (как я только что) Вместо того, чтобы делать еще один «хакерский скрипт», просто поместите функцию внутри скрипта, который вы вызываете
Вызовите ваш скрипт с помощью «необязательных аргументов х-терминала-эмулятора -e / path / to / script здесь»
Не забудьте поставить «$ @» в конце скрипта
источник
Используйте экранную команду и -d отсоединиться от существующего экранного сеанса и подключите его здесь -m принудительно запустить новый экранный сеанс -S создать именованный сеанс вместо использования имени по умолчанию
источник