Startoption für das Konfigurationsverzeichnis von Midnight Commander

10

Wenn Sie ausführen mc -F , sehen Sie, dass das Konfigurationsverzeichnis [Systemdaten] und das Konfigurationsverzeichnis [Benutzerdaten] vorhanden sind

[Systemdaten]

Config directory: /etc/mc/

[Benutzerdaten]

Config directory: /home/<username>/.config/mc/

Das erste ist systemweit, das zweite ist benutzerspezifisch.

Der zweite scheint vom Heimatort des Benutzers abhängig zu sein. mit anderen Worten, es ist daran gebunden. Das heißt, wenn Sie mc (vorübergehend) mit einer alternativen Konfiguration als derselbe Benutzer starten möchten, können Sie dies nicht tun, ohne zuvor exportdie HOME-Variable zu ändern (und zu ändern ). Diese Problemumgehung "Ändern von HOME vor dem Start" ist zwar ausreichend, aber kaum akzeptabel, da sie den Benutzer HOME ändert.

Glaubst du, es gibt einen Weg zu beidem?

  1. Ändern Sie das Benutzerkonfigurationsverzeichnis dynamisch, bevor der mc gestartet wird (die Befehlszeilenoption ist am besten geeignet, scheint aber nicht vorhanden zu sein).

  2. Stellen Sie 'natural' HOME für Benutzer unmittelbar nach dem Start von mc wieder her, wenn das Ändern von HOME zuvor die einzige Möglichkeit ist, den Speicherort des Benutzerverzeichnisses zu ändern

unterschiedlich konfigurierte mc-Instanzen dürfen sich nicht gegenseitig stören, wenn sie gleichzeitig ausgeführt werden.

Tagwint
quelle

Antworten:

11

Das stellte sich als einfacher heraus, als man denken könnte. Die Variable MC_HOME kann vor dem Starten von mc auf einen alternativen Pfad gesetzt werden. Manpages sind nicht etwas, auf das man sofort eine Antwort finden kann =)

So funktioniert es: - üblicher Weg

[jsmith@wstation5 ~]$ mc -F
Root directory: /home/jsmith

[System data]
<skipped>

[User data]
    Config directory: /home/jsmith/.config/mc/
    Data directory:   /home/jsmith/.local/share/mc/
        skins:          /home/jsmith/.local/share/mc/skins/
        extfs.d:        /home/jsmith/.local/share/mc/extfs.d/
        fish:           /home/jsmith/.local/share/mc/fish/
        mcedit macros:  /home/jsmith/.local/share/mc/mc.macros
        mcedit external macros: /home/jsmith/.local/share/mc/mcedit/macros.d/macro.*
    Cache directory:  /home/jsmith/.cache/mc/

und der alternative Weg:

[jsmith@wstation5 ~]$ MC_HOME=/tmp/MCHOME mc -F
Root directory: /tmp/MCHOME

[System data]
<skipped>    

[User data]
    Config directory: /tmp/MCHOME/.config/mc/
    Data directory:   /tmp/MCHOME/.local/share/mc/
        skins:          /tmp/MCHOME/.local/share/mc/skins/
        extfs.d:        /tmp/MCHOME/.local/share/mc/extfs.d/
        fish:           /tmp/MCHOME/.local/share/mc/fish/
        mcedit macros:  /tmp/MCHOME/.local/share/mc/mc.macros
        mcedit external macros: /tmp/MCHOME/.local/share/mc/mcedit/macros.d/macro.*
    Cache directory:  /tmp/MCHOME/.cache/mc/

Anwendungsfall dieser Funktion:

Sie müssen denselben Benutzernamen auf dem Remote-Server verwenden (der Zugriff kann über rsa-Schlüssel erfolgen) und möchten Ihre bevorzugte mc-Konfiguration verwenden, ohne sie zu überschreiben. Gleichzeitige Sitzungen stören sich nicht.

Dies funktioniert gut als Teil des in https://github.com/Russell91/sshrc beschriebenen sshrc-Ansatzes

Tagwint
quelle
Ein kleiner Nachteil dieser Lösung: Wenn Sie MC_HOME auf ein anderes Verzeichnis als Ihr übliches HOME setzen, ignoriert mc den Inhalt Ihres üblichen ~ / .bashrc, sodass beispielsweise Ihre in dieser Datei definierten benutzerdefinierten Aliase nicht mehr funktionieren. Umgehung: Fügen Sie einen Symlink zu Ihrem ~ / .bashrc in das neue MC_HOME-Verzeichnis ein
Cri
1

Wenn Sie meinen, möchten Sie in der Lage sein, zwei Instanzen von mc als denselben Benutzer gleichzeitig mit unterschiedlichen Konfigurationsverzeichnissen auszuführen , soweit ich Ihnen sagen kann, dass dies nicht möglich ist. Der Pfad ist fest codiert.

Wenn Sie jedoch meinen, dass Sie in der Lage sein möchten, zu wechseln, welches Konfigurationsverzeichnis verwendet wird, finden Sie hier eine Idee (getestet, funktioniert). Sie möchten es wahrscheinlich tun, ohne dass mc läuft:

  • Erstellen Sie ein Verzeichnis $HOME/mc_confmit einem Unterverzeichnis one.
  • Verschieben Sie den Inhalt von $HOME/.config/mcin das $HOME/mc_conf/oneUnterverzeichnis
  • Duplizieren Sie das oneVerzeichnis als $HOME/mc_conf/two.
  • Erstellen Sie ein Skript $HOME/bin/switch_mc:

    #!/bin/bash
    
    configBase=$HOME/mc_conf
    linkPath=$HOME/.config/mc
    
    if [ -z $1 ] || [ ! -e "$configBase/$1" ]; then
        echo "Valid subdirecory name required."
        exit 1
    fi
    
    killall mc
    rm $linkPath
    ln -sv $configBase/$1 $linkPath  
    
  • Führen Sie dies aus , switch_mc one. rmwird über keine solche Datei bellen, das spielt keine Rolle.

Hoffentlich ist klar, was dort passiert - dies legt den Konfigurationsverzeichnispfad als Symlink fest. Alle Konfigurationsänderungen, die Sie jetzt vornehmen und speichern, befinden sich im oneVerzeichnis. Sie können dann beenden und switch_mc twozur alten Konfiguration zurückkehren, dann mc erneut starten, Änderungen vornehmen und diese speichern usw.

Sie könnten davonkommen, indem Sie das entfernen killall mcund herumspielen; Das Konfigurationsmaterial befindet sich in der iniDatei, die beim Start gelesen wird (Sie können also nicht auf diese Weise im laufenden Betrieb einschalten). Es wird dann erst beim Beenden berührt, wenn Sie "Setup speichern", aber beim Beenden wird es möglicherweise überschrieben. Daher besteht hier die Gefahr, dass Sie etwas löschen, das Sie zuvor oder außerhalb der laufenden Instanz getan haben.

Goldlöckchen
quelle
Das funktioniert in der Tat, Ihre Idee ist ziemlich klar. Vielen Dank für Ihre Zeit. Meine Idee war jedoch, unterschiedlich konfigurierte MCs unter demselben Konto ausführen zu können, ohne sich gegenseitig zu stören. Ich hätte das in meiner Frage angeben sollen. Der Pfad zum Konfigurationsverzeichnis ist in der Tat fest codiert, aber er ist RELATIV zum Home-Verzeichnis des Benutzers fest codiert. Dies ist der Wert von $ HOME. Wenn Sie ihn also ändern, ändern Sie den Speicherort des Konfigurationsverzeichnisses. Ich habe das überprüft. Der Nachteil ist, dass $ HOME so lange geändert bleibt, wie mc ausgeführt wird.
Dies
Ich habe mein ursprüngliches q mit der Bedingung "zur gleichen Zeit" erweitert - es passte nicht in meine
vorherige