Option de démarrage de l'emplacement du répertoire de configuration de Midnight Commander

10

Si vous exécutez, mc -F vous verrez qu'il y a le répertoire de configuration [Données système] et le répertoire de configuration [Données utilisateur]

[Données système]

Config directory: /etc/mc/

[Données d'utilisateur]

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

Le premier est à l'échelle du système, le second est spécifique à l'utilisateur.

Le second semble dépendre de la position d'origine de l'utilisateur; en d'autres termes, il y est lié. Cela signifie que si vous souhaitez démarrer (temporairement) mc avec une autre configuration en tant que même utilisateur, vous ne pouvez pas le faire sans modifier (et exporting) la variable HOME avant celle-ci. Cette solution de contournement "Changer de HOME-avant de commencer", bien qu'elle fasse l'affaire, est difficilement acceptable, car elle modifie bien ... l'utilisateur HOME.

Pensez-vous qu'il existe un moyen

  1. Modifiez le répertoire de configuration utilisateur dynamiquement avant le démarrage de mc (l'option de ligne de commande serait la chose la plus appropriée, mais elle ne semble pas être là)

  2. Restaurer HOME «naturel» pour l'utilisateur juste après le démarrage de mc, si changer HOME avant est le seul moyen de changer l'emplacement du répertoire utilisateur

les instances mc configurées différemment ne doivent pas interférer si elles s'exécutent simultanément.

Tagwint
la source

Réponses:

11

Cela s'est avéré plus simple qu'on pourrait le penser. La variable MC_HOME peut être définie sur un chemin alternatif avant de démarrer mc. Les pages de manuel ne sont pas quelque chose dont vous pouvez trouver la réponse tout de suite =)

voici comment cela fonctionne: - façon habituelle

[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/

et la manière alternative:

[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/

Cas d'utilisation de cette fonctionnalité:

Vous devez partager le même nom d'utilisateur sur le serveur distant (l'accès peut être différencié par les touches rsa) et vous souhaitez utiliser votre configuration de migration préférée sans l'écraser. Les sessions simultanées ne s'interfèrent pas.

Cela fonctionne bien dans le cadre de l'approche sshrc décrite dans https://github.com/Russell91/sshrc

Tagwint
la source
Petit inconvénient de cette solution: si vous définissez MC_HOME dans un répertoire différent de votre HOME habituel, mc ignorera le contenu de votre ~ / .bashrc habituel, ainsi, par exemple, vos alias personnalisés définis dans ce fichier ne fonctionneront plus. Solution: ajoutez un lien symbolique à votre ~ / .bashrc dans le nouveau répertoire MC_HOME
Cri
1

Si vous voulez dire, vous voulez pouvoir exécuter deux instances de mc en même temps avec le même utilisateur avec différents répertoires de configuration, pour autant que je sache, vous ne pouvez pas. Le chemin est codé en dur.

Cependant, si vous voulez dire que vous voulez pouvoir changer le répertoire de configuration utilisé, voici une idée (testée, fonctionne). Vous voulez probablement le faire sans exécuter mc:

  • Créez un répertoire $HOME/mc_conf, avec un sous - répertoire one.
  • Déplacer le contenu de $HOME/.config/mcdans le $HOME/mc_conf/onesous - répertoire
  • Dupliquez le onerépertoire en tant que $HOME/mc_conf/two.
  • Créer un script, $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  
    
  • Exécuter ce, switch_mc one. rmva aboyer sur un tel fichier, cela n'a pas d'importance.

Espérons que ce qui s'y passe est clair - cela définit le chemin du répertoire de configuration comme un lien symbolique. Quelles que soient les modifications de configuration que vous effectuez et enregistrez maintenant, elles seront intégrées au onerépertoire. Vous pouvez ensuite quitter et switch_mc two, revenir à l'ancienne configuration, puis redémarrer mc, apporter des modifications et les enregistrer, etc.

Vous pourriez vous en tirer en enlevant le killall mcet en jouant; la configuration est dans le inifichier, qui est lu au démarrage (vous ne pouvez donc pas passer à la volée de cette façon). Il n'est ensuite pas touché jusqu'à la sortie, sauf si vous "Enregistrer la configuration", mais à la sortie, il peut être remplacé, donc le danger ici est que vous effacez quelque chose que vous avez fait plus tôt ou en dehors de l'instance en cours d'exécution.

boucle d'or
la source
cela fonctionne en effet, votre idée est assez claire, merci pour votre temps Cependant mon idée était de pouvoir exécuter des mc configurés différemment sous le même compte sans interférer les uns les autres. J'aurais dû préciser cela dans ma question. le chemin vers le répertoire de configuration est en fait codé en dur, mais il est RELATIVEMENT codé par rapport au répertoire de base de l'utilisateur, c'est-à-dire la valeur de $ HOME, le modifiant ainsi avant le démarrage de MC modifie l'emplacement du répertoire de configuration - j'ai vérifié cela. l'inconvénient est que $ HOME reste modifié tant que mc fonctionne, ce qui pourrait être résolu si mc avait une sorte de hook de démarrage pour mettre la restauration dans HOME d'origine
Tagwint
J'ai étendu mon q d'origine avec la condition `` en même temps '' - il ne correspondait pas à la limite de taille de mon commentaire
précédent