Opção de inicialização do local de dir de configuração do Midnight Commander

10

Se você executar, mc -F verá os diretórios de configuração [System data] e [User data] config

[Dados do sistema]

Config directory: /etc/mc/

[Dados do usuário]

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

O primeiro é o sistema inteiro, o segundo é específico do usuário.

O segundo parece depender da localização da residência do usuário; em outras palavras, está vinculado a isso. Isso significa que, se você deseja (temporariamente) iniciar o mc com uma configuração alternativa do mesmo usuário, não poderá fazê-lo sem alterar (e exporting) a variável HOME antes dele. Essa solução alternativa 'Alterar o HOME antes do início', embora faça o truque, é dificilmente aceitável, pois também ... modifica o usuário HOME.

Você acha que existe uma maneira de

  1. Altere o diretório de configuração do usuário dinamicamente antes de o mc iniciar (a opção de linha de comando seria a coisa mais apropriada, mas parece não estar lá)

  2. Restaurar HOME 'natural' para o usuário logo após o início do mc, se alterar a HOME antes for a única maneira de alterar a localização do diretório do usuário

As instâncias mc configuradas de maneira diferente não devem interferir uma com a outra se estiverem sendo executadas simultaneamente.

Tagwint
fonte

Respostas:

11

Isso acabou sendo mais simples como se poderia pensar. A variável MC_HOME pode ser definida como caminho alternativo antes de iniciar o mc. As páginas de manual não são algo que você possa encontrar imediatamente =)

aqui está como funciona: - maneira usual

[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 a maneira alternativa:

[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 de uso desse recurso:

É necessário compartilhar o mesmo nome de usuário no servidor remoto (o acesso pode ser diferenciado pelas chaves rsa) e você deseja usar sua mc configration favorita sem substituí-la. Sessões simultâneas não interferem entre si.

Isso funciona bem como parte da abordagem sshrc descrita em https://github.com/Russell91/sshrc

Tagwint
fonte
Uma pequena desvantagem desta solução: se você definir MC_HOME em um diretório diferente da sua HOME normal, o mc ignorará o conteúdo da sua ~ / .bashrc usual; portanto, por exemplo, seus aliases personalizados definidos nesse arquivo não funcionarão mais. Solução alternativa: adicione um link simbólico ao seu ~ / .bashrc no novo diretório MC_HOME
Cri
1

Se você quer dizer, deseja poder executar duas instâncias do mc como o mesmo usuário ao mesmo tempo com diretórios de configuração diferentes, até onde sei que não pode. O caminho é codificado.

No entanto, se você quiser mudar o diretório de configuração que está sendo usado, aqui está uma ideia (testada, funciona). Você provavelmente deseja fazê-lo sem o mc executando:

  • Crie um diretório $HOME/mc_conf, com um subdiretório one,.
  • Mova o conteúdo de $HOME/.config/mcpara o $HOME/mc_conf/onesubdiretório
  • Duplique o onediretório como $HOME/mc_conf/two.
  • Crie um 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  
    
  • Execute isso switch_mc one. rmlatirá sobre esse arquivo, isso não importa.

Espero que esteja claro o que está acontecendo lá - isso define o caminho do diretório de configuração como um link simbólico. Quaisquer alterações na configuração que você fizer e salvar agora serão no onediretório. Você pode sair e switch_mc two, revertendo para a configuração antiga, iniciar o mc novamente, fazer alterações e salvá-las, etc.

Você pode se livrar de remover killall mce brincar; o material de configuração está no iniarquivo, que é lido na inicialização (para que você não possa mudar dessa maneira). Ele não é tocado até a saída, a menos que você "Salve a instalação", mas na saída ela pode ser substituída. Portanto, o perigo aqui é que você apague algo que você fez anteriormente ou fora da instância em execução.

Cachinhos Dourados
fonte
isso funciona de fato, sua ideia é bastante clara, obrigado pelo seu tempo. No entanto, minha ideia era poder executar mc's configurados de maneira diferente sob a mesma conta, sem interferir um no outro. Eu deveria ter especificado isso na minha pergunta. o caminho para o diretório de configuração é de fato codificado, mas é codificado de forma RELATIVA ao diretório inicial do usuário, que é o valor de $ HOME, alterando-o antes que o mc start FAÇA a alteração do local do diretório de configuração - verifiquei isso. a desvantagem é $ HOME estadias alterados enquanto corre mc, que poderiam ser resolvidos se mc tinha uma espécie de gancho de inicialização para colocar restaurar lar original em
Tagwint
Eu estendi minha q original com condição 'mesmo tempo' - não se encaixava na minha anterior limitação de tamanho de comentário
Tagwint