Führen Sie terminator im erforderlichen Verzeichnis aus und führen Sie dann den erforderlichen Befehl aus


9

Ich möchte Terminator beispielsweise in einem bestimmten Verzeichnis öffnen /home/downloads/und dann einen Befehl ausführen.

Ich habe den ersten Teil mit diesem "benutzerdefinierten Befehl" ausgeführt: cd /home/downloads; bash Terminator startet jetzt in diesem Verzeichnis, aber wie kann ich den zweiten Teil ausführen?

Nun , da Terminator im Download - Verzeichnis gestartet wurde, möchte ich jeden Befehl ausführen Ich möchte zum Beispiel lsoder rakeBefehl oder einige Aliase als Befehle verwenden. Wie kann ich das machen?

Ich drücke die rechte Maustaste im Terminator und wähle Parameter, dann Layouts, dann füge ich Text im Abschnitt Benutzerdefinierter Befehl hinzu.

All dies muss nach dem Start des Terminators automatisch durchgeführt werden.


Welchen Befehl möchten Sie ausführen? Lass es einfach laufen. Möchten Sie, dass dies jedes Mal automatisch geschieht, wenn Sie den Terminator öffnen? Bitte bearbeiten Sie Ihre Frage und i) klären Sie, was Sie tun möchten, und ii) teilen Sie uns genau mit, wie Sie diesen "benutzerdefinierten Befehl" eingerichtet haben. War er in den Optionen des Terminators enthalten?
Terdon

Ja, ich möchte, dass der erste und dann der zweite Befehl automatisch ausgeführt werden, nachdem ich den Terminator ausgeführt habe, aber jetzt weiß ich nur, wie der erste Befehl ausgeführt wird und es funktioniert, aber ich weiß nicht, wie der zweite Befehl ausgeführt wird. Der erste Befehl lautet: "cd" für einen Katalog und der zweite Befehl muss beliebig sein, ob in diesem Katalog oder nicht. Ich bearbeite meine Frage. Entschuldigung für meine hässliche Sprache.
Asq

Antworten:


4

Führen Sie cd /home/downloads; exec bashals benutzerdefinierten Befehl aus. (Das execeingebaute Gerät stellt sicher, dass bashes sich um ein untergeordnetes Element des Terminalemulators handelt. Ohne dieses Terminal wird es möglicherweise ein Enkelkind.) Sie können terminator -e 'cd /home/downloads; exec bash'über die Befehlszeile ausgeführt werden.

Sie können im benutzerdefinierten Befehl keine Aliase verwenden, da Ihre Aliase durch definiert sind. Diese ~/.bashrcDatei wird jedoch nur von interaktiven Shells geladen, nicht von der Scripting-Shell, die hier als Klebstoff zwischen dem Terminalemulator und der Scripting-Shell verwendet wird. Wenn Sie Aliase verwenden möchten, müssen Sie diese explizit laden. Wenn Sie sie in einer separaten Datei aufbewahren, wäre das so etwas wie

. ~/.bash_aliases; cd /home/downloads; exec bash

oder in der Kommandozeile

terminator -x bash -c '. ~/.bash_aliases; cd /home/downloads; exec bash'

Wenn Ihre Aliase vorhanden sind ~/.bashrc, verwenden Sie . ~/.bashrc, aber achten Sie darauf, dass möglicherweise Dinge in Ihrem .bashrcBenutzer Fehler verursachen, da die Shell nicht interaktiv ist. In diesem Fall besteht die einfachste Lösung darin, Ihre Aliase (und Funktionen sowie alle anderen Einstellungen, die Sie im Klebercode verwenden möchten) in eine separate Datei aufzuteilen und .diese aus einzuschließen .bashrc.


3

Ich hatte das gleiche Problem beim Aktivieren virtueller Umgebungen mit Terminator .

Der Trick besteht darin, alles mit nur einem Befehl zu erledigen : bash. Nutzen Sie die -iOption (interaktiv) und verwenden Sie eine benutzerdefinierte Option, die --rcfileauf das PROMPT_COMMANDeingestellt ist, was wir ausführen möchten. Das Ergebnis wäre wie folgt:

command = "bash --rcfile <(cat ${HOME}/.bashrc; echo 'export PROMPT_COMMAND="your commands; go here; unset PROMPT_COMMAND"') -i"

Ersetzen your commands; go here;Sie einfach durch Ihre tatsächlichen Befehle. In dieser Antwort finden Sie eine Erklärung .


Irgendeine Idee, warum der von mir angegebene Befehl nicht mit Strg + C beendet werden kann?
Flowkap

2

Fügen Sie den anderen Befehl genauso hinzu wie den ersten. Zum Beispiel, um Folgendes auszuführen ls:

cd /home/downloads; ls; bash

Sie können dies zur Option "Befehl" Ihres Profils hinzufügen:

Geben Sie hier die Bildbeschreibung ein

Der Grund, den Sie nicht erhalten, rakeist, dass es nicht im Standardpfad ist. Um es zu verwenden, müssen Sie den Pfad angeben. Führen Sie diesen Befehl zunächst in Ihrem Terminal aus:

type rake

Das wird so etwas wie zurückgeben /foo/bin/rake. Das ist der Weg, den Sie brauchen. Nehmen Sie es und fügen Sie es dem obigen Befehl "Benutzerdefiniert" hinzu:

cd /home/downloads; /foo/bin/rake; bash

Dies funktioniert nicht für Aliase. Aliase werden von Ihrer Shell eingerichtet und sind hier nicht verfügbar. Eine Problemumgehung besteht darin, stattdessen Skripte zu verwenden. Wenn Sie also einen Alias ​​wie diesen haben:

alias foo="command1 argument2"

Erstellen Sie ein Skript, rufen Sie es auf foo.shund speichern Sie es /home/youruser/binmit folgenden Inhalten:

#!/usr/bin/env bash
command1 argument2

Und machen Sie es ausführbar:

chmod a+x /home/username/bin/foo.sh

Verwenden Sie dann im Abschnitt "Benutzerdefinierter Befehl":

cd /home/downloads; /home/username/bin/foo.sh; bash

Ja, ich weiß das und der Befehl "ls" funktioniert, aber 1. Zum Beispiel funktioniert der Befehl "rake" nicht und das Terminal zeigt den Fehler an: "/ bin / bash: rake: Befehl nicht gefunden" 2. Ich habe einige Aliase und für Beispiel "cd / home / downloads; 'aliasname'; bash" funktioniert ebenfalls nicht, Terminal zeigt den gleichen Fehler an
Asq

@Asq Nun ja, deshalb habe ich Sie gebeten, uns zu sagen, welchen Befehl Sie ausführen möchten. Bitte bearbeiten Sie Ihre Frage und geben Sie konkrete Beispiele. Aliase funktionieren nicht, das können Sie vergessen, rakesollten es aber, wenn Sie den vollständigen Pfad verwenden /path/to/rake.
Terdon

Ich muss meine Hauptfrage bearbeiten? Und was meinst du mit "wenn du den vollständigen Pfad / Pfad / zu / Rechen verwendest"? Ich cd in das Verzeichnis, in dem ich immer Rake benutze und es funktioniert, aber "cd / path / to /
rake

@Asq ja, bitte bearbeiten Sie Ihre ursprüngliche Frage. Tun Sie das nicht cd /path/to/rake; rake; bashtun /path/to/rake; rake; bash.
Terdon

:( Ich benutze den Befehl Rake, wenn ich mich im Verzeichnis / home / 123 befinde. Ich füge jetzt im benutzerdefinierten Befehl Folgendes hinzu: "/ home / 123; rake; bash", aber die Konsole zeigt mir 2 Fehler: 1. / bin / bash: / home / 123: Dies ist ein Katalog 2. / bin / bash:
rake

1

Wenn Sie mit der rechten Maustaste auf ein geöffnetes Terminator-Fenster klicken, können Sie "Einstellungen" auswählen. Wählen Sie das "Profil" und von dort die Registerkarte "Befehl". Es gibt ein Kontrollkästchen mit dem Titel "Führen Sie einen benutzerdefinierten Befehl anstelle meiner Shell aus."

Ich glaube, das ist es, wonach Sie suchen.


1

Verwenden Sie einfach nicht ' command =', um das Verzeichnis zu wechseln. Verwenden Sie es für Ihren eigentlichen Befehl!

Geben Sie beim Bearbeiten .config/terminator/configeinfach an

  • ' directory = <dir>' wenn das Terminal automatisch in ein bestimmtes Verzeichnis cd soll, oder
  • ' command = <cmd>; <your_shell>' Wenn ein benutzerdefinierter Befehl ausgeführt werden soll und nicht nur das Verzeichnis gewechselt werden soll

Zum Beispiel:

  • Wenn Sie nur möchten, dass das Terminal <dir>beim Start eine CD erstellt , geben Sie 'Verzeichnis' an und lassen Sie 'Befehl' leer:

    [[terminal7]]]
    directory = /home/dan/src/wmc
    order = 1
    parent = child3
    profile = default
    type = Terminal
    uuid = ebbe5595-06be-43ff-b7ce-4534aa6bb7f8
    
  • Wenn Sie nur einen benutzerdefinierten Befehl ausführen möchten, geben Sie nur den folgenden Befehl an:

    [[terminal7]]]
    command = /home/dan/mine/my-custom-command
    order = 1
    parent = child3
    profile = default
    type = Terminal
    uuid = ebbe5595-06be-43ff-b7ce-4534aa6bb7f8
    
  • Wenn Sie möchten, dass beide in DIR cd und Befehl ausführen:

    [[terminal7]]]
    directory = /home/dan/dl-dir
    command = /home/dan/mine/my-custom-command-to-run-in-dlDIR
    order = 1
    parent = child3
    profile = default
    type = Terminal
    uuid = ebbe5595-06be-43ff-b7ce-4534aa6bb7f8
    
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.