Mam trzy skrypty, które muszę uruchomić, kiedy uruchamiam komputer Ubuntu, uruchamiają one usługi, z których korzystam w moim środowisku programistycznym.
Aby to zrobić, ręcznie otwieram trzy terminale i wpisuję polecenia.
Czy istnieje sposób na utworzenie skryptu, który otworzy trzy terminale i wykona jedno polecenie w każdym z nich? (Każde polecenie powinno znajdować się w osobnym oknie terminala, aby zobaczyć ich dane wyjściowe).
command-line
scripts
services
JSBach
źródło
źródło
gnome-terminal -e command
działa tylko, jeślicommand
jest cytowany. Więc to nie działa:gnome-terminal -e "echo hello world; sleep 3"
ale to robi:gnome-terminal -e "bash -c 'echo hello world; sleep 3'"
. Westchnienie.; $SHELL
na końcu polecenia. Np .:gnome-terminal --tab --title="test" --command="bash -c 'cd /etc; ls; $SHELL'"
Zamiast sztywnego kodowania
gnome-terminal
,konsole
et cetera, korzystać z systemu alternatyw. Program, który wykonuje domyślny emulator terminala to:W moim systemie otwiera nowe wystąpienie Konsoli za każdym razem, gdy wykonuję to polecenie.
Na szczęście terminale wydają się obsługiwać
-e
opcję wykonania polecenia (zweryfikowałem to pod kątemkonsole
ignome-terminal
). Argumenty po poleceniu są przekazywane do wywołanego polecenia. Bash odmawia pozostania otwartym w moim terminalu, potrzebny jest dodatkowy skrypt, aby uzyskać terminal:Jeśli zapisałeś poprzedni skrypt jako
/home/user/hacky
i uczyniłeś go wykonywalnym, uruchomisz skrypty za pomocą:Pełna ścieżka jest wymagana i
/home/user/hacky
musi być wykonywalna.Poprzednią próbę uruchomienia skryptu w nowym oknie terminala można znaleźć w wersji 2 , zanim zdałem sobie sprawę, że można przekazać argumenty
x-terminal-emulator
.źródło
bash
) lub mieć linię taką jakread -p "Press Return to continue"
.cd xxx && start.sh
. Tłumacz interpretuje && jako drugą część polecenia (co jest logiczne), ale jeśli go zacytuję, to spróbuje wykonać całą sprawę jako jeden wielki argumentCałkiem proste-
To wystarcza w przypadku innych poleceń, które nie muszą wyświetlać niczego w terminalu. Ale tutaj trzeba zobaczyć status.
Musi więc działać w oknie terminala
Drugi post miał
[]
być symbolem zastępczymTutaj „NAMEOFTHEPROFILE” należy zastąpić nazwą profilu, który „Przechowuje terminal po wyjściu polecenia”.
źródło
[]
był tylko symbolem zastępczym--window-with-profile=NAMEOFTHEPROFILE
do tego, co dałemWspomagany odpowiedzią @ nickguletskii i własnym komentarzem pod jego odpowiedzią oraz zainspirowany oceną @ grabantot mojego komentarza, oto mój ulubiony sposób, aby to zrobić, szczególnie gdy chcę, aby terminal był otwarty, aby móc go następnie ręcznie użyć.
Dawny. użycie: jest to naprawdę przydatne, aby dodać do programów startowych, aby ten skrypt działał, otwierał terminal, tworzył i nazywał kartę w terminalu i uruchamiał polecenie. Lub możesz po prostu dodać symboliczne łącze do tego skryptu na pulpicie. Korzystam z tego rodzaju podejścia, dzięki czemu mogę dwukrotnie kliknąć pojedynczą ikonę na pulpicie i otworzyć kilka terminali (z różnymi kartami nazwanymi zgodnie z tym, co zamierzam w nich wykonać) i programami do skonfigurowania moje środowisko programistyczne, na przykład, do codziennej pracy.
Oto wymyślony przykład, który otwiera pojedynczą kartę, tytułuje ją „test”, a następnie uruchamia w niej proste polecenie
cd /etc; ls
.$SHELL
Część na końcu zmusza powłokę pozostać otwarte, dzięki czemu można następnie zobaczyć swoje wyjście i nadal go używać (dowiedziałem to gdzieś indziej na przepełnienie stosu):Oto bardziej skomplikowany przykład, który otwiera 3 oddzielne zakładki w tym samym terminalu gnome. To właśnie robi mój skrót na pulpicie, dzięki czemu mogę jednocześnie otworzyć kilka okien programowania:
Oto podział tego polecenia powyżej:
gnome-terminal
= otwórz terminal gnome--tab
= otwórz unikalną kartę tego, co będzie dalej--title="tab 1"
= tytuł tej zakładki „zakładka 1”--command="bash -c 'cd /etc; ls; $SHELL'"
= uruchombash -c 'cd /etc; ls; $SHELL'
polecenie, które właśnie utworzyłem jako przykład; oto co robi:bash -c
mówi, że to bash 'c'ommandcd /etc
= 'c'hange' d'irectory w ścieżce „/ etc”ls
= 'l'i''s zawartość tego katalogu$SHELL
= ten tajemniczy smakołyk jest wymagany do utrzymania muszli otwartej, abyś mógł z nią pracować. Jeśli chcesz otworzyć powłokę, uruchom polecenie, a następnie zamknij, po prostu usuń tę część. Chcę jednak, aby karta pozostała otwarta, aby móc tworzyć magię programowania. :)--tab
aby utworzyć zakładkę 2, a następnie ponownie dla zakładki 3. Dostosuj do treści twojego serca.Zrzut ekranu:
źródło
komentując odpowiedź Lekensteyn. Wiem, że to stary post, ale dla każdego, kto uzna to za przydatne (tak jak właśnie to zrobiłem) Zamiast tworzyć kolejny „hacky skrypt”, po prostu wstawiając funkcję do skryptu, który wywołujesz
Wywołaj skrypt za pomocą „x-terminal-emulator -e / path / to / script hacky_function opcjonalne argumenty tutaj”
Nie zapomnij wstawić „$ @” na końcu skryptu
źródło
Użyj polecenia screen i -d odłącz od istniejącej sesji screen, i podłącz ponownie tutaj -m wymuś nową sesję screen -S utwórz nazwaną sesję zamiast używać domyślnej nazwy
źródło