Ich muss mehrere Terminal-Registerkarten öffnen, ihnen Titel geben, in ein Verzeichnis wechseln und jede Registerkarte einen Befehl ausführen lassen.
Ich bin neu in Linux und Shell-Skripten. Nachdem ich online gesucht und einige Lösungen überprüft habe, habe ich dieses Skript erstellt ( BEARBEITET basierend auf den folgenden Antworten):
#!/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
Es öffnet die Registerkarten, benennt sie, führt jedoch die Befehle, die diesen Fehler erzeugen, nicht aus:
Beim Erstellen des untergeordneten Prozesses für dieses Terminal ist ein Fehler aufgetreten
Ein weiteres Manko ist, dass wenn ich den laufenden Befehl anhalte, die Registerkarte geschlossen wird, was ich nicht möchte. Ich muss in der Lage sein, den Befehl zu stoppen und ihn auf derselben Registerkarte erneut auszuführen.
Was ist los mit dem Skript? Gibt es einen anderen einfacheren Weg, dies zu tun?
Hinweis: Wenn ich den Teil (-e "\" bash -c $ {cmds [i]}; bash \ "") aus dem Befehl entfernt habe, werden die Registerkarten im angegebenen Verzeichnis geöffnet und ohne Fehler benannt.
-Edit-1:
@Tuknutx Antwort unten und Bearbeiten des Skripts Nach der Anwendung der Fehler erscheint nicht mehr, aber es gibt mir bash: rails c: command not found
und rails s
erstellt eine neue Rails - Anwendung , anstatt den Schienen - Server zu starten, ich bin mit .rmvrc einen gemset auszuwählen , sobald diese Ordner zugegriffen wird .
cmds[1]="'ping 192.168.9.9'"
, gibt es mir den gleichen Fehler, aber ich habe ihn durch Entfernen eines einfachen Zitats behoben. Also, wenn ich schreibe, cmds[1]="ping 192.168.9.9"
funktioniert es.
tab=" --tab-with-profile=Default"
?