Opzione di avvio della posizione della directory di configurazione di Midnight Commander


10

Se esegui mc -F , vedrai la directory di configurazione [Dati di sistema] e la directory di configurazione [Dati utente]

[Dati di sistema]

Config directory: /etc/mc/

[Dati utente]

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

Il primo è a livello di sistema, il secondo è specifico dell'utente.

Il secondo sembra dipendere dalla posizione di residenza dell'utente; in altre parole, è legato ad esso. Ciò significa che se si desidera (temporaneamente) avviare mc con una configurazione alternativa dello stesso utente, non è possibile farlo senza modificare (e exporting) la variabile HOME prima di essa. Questa soluzione alternativa "Modifica-HOME-prima di iniziare", sebbene risolva il problema, è difficilmente accettabile, in quanto ... modifica l'utente HOME.

Pensi che ci sia un modo per entrambi

  1. Cambia dinamicamente la directory di configurazione dell'utente prima dell'avvio di mc (l'opzione della riga di comando sarebbe la cosa più appropriata, ma non sembra esserci)

  2. Ripristina HOME 'naturale' per l'utente subito dopo l'avvio di mc, se cambiare HOME prima è l'unico modo per cambiare la posizione della directory utente

le istanze di mc configurate diversamente non devono interferire a vicenda se eseguite contemporaneamente.

Risposte:


11

Ciò si è rivelato più semplice come si potrebbe pensare. La variabile MC_HOME può essere impostata su un percorso alternativo prima di avviare mc. Le pagine man non sono qualcosa in cui puoi trovare subito la risposta =)

ecco come funziona: - solito

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

e il modo alternativo:

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

Caso d'uso di questa funzione:

Devi condividere lo stesso nome utente sul server remoto (l'accesso può essere distinto dalle chiavi rsa) e vuoi usare la tua configrazione mc preferita senza sovrascriverla. Le sessioni simultanee non si interferiscono a vicenda.

Funziona bene come parte dell'approccio sshrc descritto in https://github.com/Russell91/sshrc


Un piccolo inconveniente di questa soluzione: se imposti MC_HOME su una directory diversa dalla solita HOME, mc ignorerà il contenuto del tuo solito ~ / .bashrc, quindi, ad esempio, i tuoi alias personalizzati definiti in quel file non funzioneranno più. Soluzione alternativa: aggiungere un collegamento simbolico al proprio ~ / .bashrc nella nuova directory MC_HOME
Cri

1

Se vuoi dire, vuoi essere in grado di eseguire due istanze di mc come lo stesso utente contemporaneamente con diverse directory di configurazione, per quanto posso dire che non puoi. Il percorso è hardcoded.

Tuttavia, se vuoi dire, vuoi essere in grado di cambiare la directory di configurazione utilizzata, ecco un'idea (testata, funzionante). Probabilmente vuoi farlo senza mc in esecuzione:

  • Creare una directory $HOME/mc_conf, con una sottodirectory, one.
  • Sposta il contenuto di $HOME/.config/mcnella $HOME/mc_conf/onesottodirectory
  • Duplica la onedirectory come $HOME/mc_conf/two.
  • Creare uno 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  
    
  • Eseguire questo, switch_mc one. rmabbaia per nessun file del genere, non importa.

Spero che sia chiaro cosa sta succedendo lì: questo imposta un percorso di directory di configurazione come collegamento simbolico. Qualunque modifica di configurazione apportata e salvata sarà nella onedirectory. È quindi possibile uscire e switch_mc tworipristinare la vecchia configurazione, quindi riavviare mc, apportare modifiche e salvarle, ecc.

Potresti cavartela rimuovendo killall mce giocando; il contenuto della configurazione si trova nel inifile, che viene letto all'avvio (quindi non è possibile attivare al volo in questo modo). Non viene quindi toccato fino all'uscita a meno che non si "Salva impostazione", ma all'uscita potrebbe essere sovrascritto, quindi il pericolo qui è che si cancella qualcosa che è stato fatto prima o all'esterno dell'istanza corrente.


funziona davvero, la tua idea è abbastanza chiara, grazie per il tuo tempo Tuttavia la mia idea era quella di essere in grado di eseguire mc configurati in modo diverso con lo stesso account senza interferire a vicenda. Avrei dovuto specificarlo nella mia domanda. il percorso per configurare la directory è in realtà hardcoded, ma è hardcoded RELATIVAMENTE alla home directory dell'utente, che è il valore di $ HOME, quindi cambiandola prima di mc start cambia la posizione della directory di configurazione - l'ho verificato. lo svantaggio è che $ HOME rimane modificato fintanto che mc viene eseguito, il che potrebbe essere risolto se mc avesse una sorta di hook di avvio per mettere il ripristino a HOME originale in
Tagwint

Ho esteso la mia q originale con la condizione 'stesso tempo' - non si adattava alla limitazione della dimensione del mio commento precedente
Tagwint
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.