Опция запуска местоположения директории конфигурации Midnight Commander

10

Если вы запустите, mc -F вы увидите каталог конфигурации [System data] и каталог config [User data]

[Системные данные]

Config directory: /etc/mc/

[Данные пользователя]

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

Первый предназначен для всей системы, второй - для конкретного пользователя.

Второй, кажется, зависит от домашнего местоположения пользователя; другими словами, это связано с этим. Это означает, что если вы хотите (временно) запустить mc с альтернативной конфигурацией от имени того же пользователя, вы не сможете сделать это без изменения (и изменения export) переменной HOME до этого. Этот обходной путь «Изменение-HOME-before-to-start», хотя и делает трюк, вряд ли приемлем, так как хорошо ... действительно изменяет пользовательский HOME.

Как вы думаете, есть ли способ

  1. Динамически изменяйте пользовательский конфиг dir до запуска mc (опция командной строки будет наиболее подходящей, но, похоже, ее там нет)

  2. Восстановите «естественный» HOME для пользователя сразу после запуска mc, если изменение HOME до этого является единственным способом изменить местоположение dir пользователя

Экземпляры mc, настроенные по-разному, не должны мешать друг другу при одновременной работе.

Tagwint
источник

Ответы:

11

Как оказалось, все оказалось проще. Переменная MC_HOME может быть установлена ​​на альтернативный путь до запуска mc. Справочные страницы не то, что вы можете найти ответ сразу =)

вот как это работает: - обычным способом

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

и альтернативный способ:

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

Вариант использования этой функции:

Вы должны использовать одно и то же имя пользователя на удаленном сервере (доступ может быть ограничен ключами rsa) и хотите использовать свою любимую конфигурацию mc без перезаписи. Параллельные сеансы не мешают друг другу.

Это хорошо работает как часть sshrc-подхода, описанного в https://github.com/Russell91/sshrc

Tagwint
источник
Небольшой недостаток этого решения: если вы установите MC_HOME в каталог, отличный от вашего обычного HOME, mc будет игнорировать содержимое вашего обычного ~ / .bashrc, поэтому, например, ваши пользовательские псевдонимы, определенные в этом файле, больше не будут работать. Обходной путь: добавьте символическую ссылку на ваш ~ / .bashrc в новый каталог MC_HOME
Cri
1

Если вы имеете в виду, вы хотите иметь возможность запускать два экземпляра mc от одного и того же пользователя одновременно с разными каталогами конфигурации, насколько я могу судить, вы не можете. Путь жестко закодирован.

Однако, если вы имеете в виду, вы хотите иметь возможность переключаться, какой каталог конфигурации используется, вот идея (проверено, работает). Вы, вероятно, хотите сделать это без запуска mc:

  • Создайте каталог $HOME/mc_confс подкаталогом one.
  • Переместить содержимое $HOME/.config/mcв $HOME/mc_conf/oneподкаталог
  • Дублируйте oneкаталог как $HOME/mc_conf/two.
  • Создание сценария, $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  
    
  • Запустите это switch_mc one. rmне будет лаять о таком файле, это не имеет значения.

Надеюсь, понятно, что там происходит - это устанавливает путь к каталогу config как символическую ссылку. Все изменения конфигурации, которые вы сейчас делаете и сохраняете, будут в oneкаталоге. Затем вы можете выйти и switch_mc two, вернувшись к старой конфигурации, затем снова запустить mc, внести изменения и сохранить их и т. Д.

Вы можете сойти с рук, удалив killall mcи играя вокруг; материал конфигурации находится в iniфайле, который читается при запуске (так что вы не можете включить его «на лету»). Затем он не будет затронут до выхода, пока вы не «сохраните настройки», но при выходе он может быть перезаписан, поэтому здесь есть опасность, что вы удалите то, что сделали ранее или вне работающего экземпляра.

лютик золотистый
источник
это действительно работает, ваша идея довольно ясна, спасибо за ваше время. Однако моя идея состояла в том, чтобы иметь возможность запускать разные сконфигурированные mc под одной учетной записью, не мешая друг другу. Я должен был указать это в своем вопросе. путь к config dir на самом деле жестко закодирован, но он жестко связан с домашним каталогом пользователя, то есть значением $ HOME, поэтому его изменение перед запуском mc ДЕЛАЕТ изменение местоположения dir config - я проверял это. недостаток в том, что $ HOME остается неизменным до тех пор, пока запускается mc, что можно было бы устранить, если бы mc имел своего рода загрузочный хук, чтобы поместить восстановление в исходный HOME
Tagwint
Я расширил свой исходный q с условием «то же время» - он не вписывался в мое ограничение на размер предыдущего комментария
Tagwint