Muszę otworzyć wiele kart terminali, nadać im tytuły, przejść do katalogu i sprawić, by każda karta uruchomiła polecenie.
Jestem nowy w Linuksie i skryptach powłoki, po przeszukaniu Internetu i sprawdzeniu niektórych rozwiązań, stworzyłem ten skrypt ( EDYTOWANY na podstawie poniższych odpowiedzi):
#!/bin/bash
cd /media/Extra/Project
tab=" --tab-with-profile=Default"
options=(--tab --title=Terminal)
cmds[1]="'rails s'"
titles[1]="Server"
cmds[2]="'rails c'"
titles[2]="Console"
for i in 1 2; do
options+=($tab --title="${titles[i]}" -e "bash -c \"${cmds[i]} ; bash\"" )
done
gnome-terminal "${options[@]}"
exit 0
Otwiera karty, nazywa je, ale nie wykonuje poleceń generujących ten błąd:
Wystąpił błąd podczas tworzenia procesu potomnego dla tego terminala
Kolejną wadą jest to, że jeśli zatrzymam uruchomione polecenie, zamyka kartę, czego nie chcę. Muszę być w stanie zatrzymać polecenie i uruchomić je ponownie w tej samej zakładce.
Co jest nie tak ze skryptem? Czy istnieje inny prostszy sposób to zrobić?
Uwaga: Jeśli usunę część (-e "\" bash -c $ {cmds [i]}; bash \ "") z polecenia, otwiera zakładki w danym katalogu i nadaje im nazwy, bez błędów.
-Edytuj-1:
Po zastosowaniu poniższej odpowiedzi @Tuknutx i edycji skryptu błąd już się nie pojawia, ale daje mi bash: rails c: command not found
i rails s
tworzy nową aplikację railsową zamiast uruchamiania serwera, używam .rmvrc do wybrania zestawu gem po uzyskaniu dostępu do tego folderu .
cmds[1]="'ping 192.168.9.9'"
, pojawia się ten sam błąd, ale rozwiązałem go, usuwając pojedynczy cytat. Więc jeśli napiszę,cmds[1]="ping 192.168.9.9"
to działa.tab=" --tab-with-profile=Default"
?Odpowiedzi:
Polecam używać
tmux
ztmuxinator
, zrobi to za Ciebie i możesz polegać również naterminator
układach!W celu
terminator
sprawdzenia układu odpowiedź mhnagaoka tutaj również askubuntu:źródło
Podsumowując kilka innych odpowiedzi i ich komentarzy, oto, z czym skończyłem:
Pamiętaj, że zabrałem kartę „wzorcową”, profile i tytuły (które wydają się być nieaktualne
gnome-terminal
).źródło
$tab -e...
Option “-e” is deprecated and might be removed in a later version of gnome-terminal.
„Użyj„ - ”, aby zakończyć opcje i ustawić wiersz polecenia do wykonania po nim.. that's an output but the comands get executed. When i use
$ tab - `polecenie nie jest wykonywane, a terminal dsisplay:There was an error creating the child process for this terminal. Failed to execute child process “bash -c 'echo Banana ; bash'” (No such file or directory)
Spróbuj tego:
w przeciwnym razie całe wyrażenie po -e będzie interpretowane jako polecenie.
Aby dołączyć aliasy z .bashrc użyj
-ic
zamiastc
źródło
bash: rails c: command not found
a „rails s” tworzy nową aplikację railsową zamiast uruchamiać serwer railsowy. Zmienia to zakres pytania, zmodyfikuję je wraz z modyfikacją skrypturails c
na terminalu bez niczego innego? Może powinno byćrails -c
?rvm list gemsets
i mówiNo command 'rvm' found
... uruchom to samo poleceniervm list gemsets
w pierwszej karcie, która otwiera się bez uruchamiania polecenia i zadziałało! czy uruchamia polecenie przed załadowaniem środowiska i załadowaniem pliku .rvmrc?Argument, który podajesz opcji -e,
"bash -c command; bash"
obejmuje cytaty. Interpretuje cały ciąg jako nazwę polecenia! Spróbuj to zamiast:-e "bash -c 'command ; bash'"
. W ten sposób uruchamiane jest okno terminalacommand
, a po tym dostajesz powłokę córki, która, jak zakładam, jest tym, czego chcesz. Nawiasem mówiąc, możesz także powiedzieć'command & bash'
; uruchomi to polecenie w tle i od razu da ci powłokę córki.źródło
options+=($tab --title="${titles[i]}" -e "\"bash -c ${cmds[i]} ;bash\"" )
naoptions+=($tab --title="${titles[i]}" -e "\"bash -c '${cmds[i]} ;bash'\"" )
i dał mi ten sam błąd .. czy robię to dobrze?