Wie kann ich lokal installierte Software automatisch beziehen lassen, wenn ich mich bei meinem Konto anmelde?

Wie kann ich lokal installierte Software automatisch beziehen lassen, wenn ich mich bei meinem Konto anmelde?

Ich habe eine neue Software manuell erstellt und installiert (aus einem Remote-Git-Repository). Jedes Mal, wenn ich sie verwenden möchte, führe ich etwas wie Folgendes aus:

. /path/to/setup_software.sh

aber ich möchte, dass das jedes Mal automatisch passiert, wenn ich mich bei meinem Konto anmelde, anstatt es manuell zu tun. Ich habe versucht, den obigen Befehl in meine .bashrcDatei einzufügen, sodass die Setup-Datei jedes Mal aufgerufen wird, wenn ich meinen Kernel öffne. Danach funktioniert alles einwandfrei und ich bin zufrieden. Mein einziges kleines (wirklich kleines) Problem ist, dass es direkt nach dem Öffnen des Kernels einige Protokollnachrichten ausgibt und das gesamte Aufrufen einige Zeit dauert (was ich nicht gerne habe :D). Wie auch immer, ich gehe davon aus, dass es da draußen eine bessere Lösung gibt, vielleicht das Verschieben meines Installationsordners an einen Ort, an dem die Setup-Datei automatisch ausgeführt wird; jede Hilfe wäre sehr willkommen.

Antwort1

Das Platzieren des source(oder .)-Befehls in einer anderen Startdatei als .bashrcwird die Ausführungszeit nicht verbessern. Sie können den Start in platzieren, /etc/profile.daber die Verzögerung bleibt dieselbe. Was die Protokollnachrichten betrifft, versuchen Sie dies in.bashrc

. /path/to/setup_software.sh >/dev/null 2>&1

Sie sehen weder die Protokollmeldungen noch etwaige auftretende Fehler.

Antwort2

Sie sollten es einfach in einfügen ~/.bash_profile, da dies das ist, was Ihre Shell beim Anmelden ausführt; Problem: Wenn Sie sich nicht bei einer Shell anmelden (z. B. weil Sie sich über eine grafische Benutzeroberfläche anmelden), wird dies nicht ausgeführt.

Anmerkung: Dies ist eine von drei getrennten Antworten. Die Getrenntheit ist beabsichtigt.

Antwort3

Wenn Sie wissen, dass Ihr Skript nur Dinge setzt, diebeide

  1. Umgebungsvariablen und nicht neue Shell-Funktionen,
  2. sich nie ändern (d. h. sich nicht von der Zeit, dem Datum oder der Versionsnummer von etwas abhängig machen, das Sie aktualisieren),

dann können Sie einfach „emulieren“, was das Skript macht: Es wird einige Umgebungsvariablen festlegen.

Wie können Sie also vergleichen, was die Umgebungsvariablen vor und nach der Ausführung Ihres Skripts sind? diffist wirklich gut zum Vergleichen von Textdateien.

Sie können verwenden set, um Ihnen die Umgebungsvariablen anzugeben (nachdem Sie die POSIX-Option festgelegt haben).

Und Sie können <(...)eine temporäre Datei erstellen, um das Ergebnis der setAusführung in einer Subshell zu speichern. Also, fügen Sie das alles zusammen:

$ diff <(set -o posix; set) <(export FOO=BAR; set -o posix; set)

werde es dir sagen

33a34
> FOO=BAR

was Sie als „es gibt eine Zeile FOO=BAR, die in der zweiten Ausgabe vorkommt, nicht in der ersten“ lesen würden.

Du kannst rennen

$ diff <(set -o posix; set) <(. /path/to/setup_software.sh; set -o posix; set)

um herauszufinden, was Ihr Setup-Skript in der Umgebung geändert hat. Sie benötigen ein menschliches Gehirn, um das zu interpretieren – manche Dinge sind einfach irrelevant, andere werden davon beeinflusst, was das Skript tatsächlich mit Ihrem System macht.

Sie können dann alle geänderten Variablen in Ihrem hinzufügen ~/.bashrc, zB

export FOO=BAR

Anmerkung: Dies ist eine von drei getrennten Antworten. Die Getrenntheit ist beabsichtigt.

Antwort4

Das klingt gefährlich danach, als ob Sie zu viel versuchen würden! Sie könnten einfach einen Alias ​​hinzufügen, der das Skript als Quelle verwendet und dann Ihre Software startet:

alias startit=". /path/to/setup_software.sh; run_software"

und dann anrufen startit.

Wenn es mehr als nur ein Befehl ist, suchen Sie möglicherweise nach etwas wie der automatischen Aktivierung von Umgebungen beim Öffnen cdbestimmter Ordner.

direnvermöglicht Ihnen so ziemlich das. Natürlich löst es nicht das Problem, dass das Beschaffen des Skripts Zeit kostet – aber es wird nur einmal ausgeführt, wenn Sie ein bestimmtes Verzeichnis aufrufen, und nicht noch einmal für dieselbe Shell.

Anmerkung: Dies ist eine von drei getrennten Antworten. Die Getrenntheit ist beabsichtigt.

verwandte Informationen