Midnight Commander 配置目录位置启动选项

Midnight Commander 配置目录位置启动选项

如果你运行 mc -F 你会看到有[系统数据]配置目录和[用户数据]配置目录

[系统数据]

Config directory: /etc/mc/

[用户数据]

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

第一个是系统范围的,第二个是用户特定的。

第二个似乎取决于用户的家庭位置;换句话说,它是受它约束的。这意味着如果您想(暂时)以同一用户的备用配置启动 mc,则无法在不更改(和exporting)之前的 HOME 变量的情况下执行此操作。这种“在启动之前更改主目录”的解决方法虽然可以解决问题,但很难令人接受,因为它确实修改了用户主目录。

你认为有办法吗

  1. 在 mc 启动之前动态更改用户配置目录(命令行选项是最合适的,但它似乎不存在)

  2. 如果之前更改 HOME 是更改用户目录位置的唯一方法,则在 mc 启动后立即恢复用户的“自然”HOME

如果同时运行,配置不同的 mc 实例不得互相干扰。

答案1

事实证明这比人们想象的更简单。 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-approach 中描述的一部分效果很好 https://github.com/Russell91/sshrc

答案2

如果您的意思是,您希望能够以同一用户身份运行两个 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会大喊没有这样的文件,但这并不重要。

希望大家清楚那里发生了什么——这将配置目录路径设置为符号链接。您现在进行并保存的任何配置更改都将保存在该one目录中。然后您可以退出并switch_mc two恢复到旧配置,然后再次启动 mc,进行更改并保存等。

你可以把它去掉killall mc然后玩玩;配置内容位于ini文件中,该文件在启动时读取(因此您不能以这种方式即时切换)。然后除非您“保存设置”,否则在退出之前不会触及它,但在退出时它可能会被覆盖,因此这里的危险是您删除了之前或在运行实例之外所做的操作。

相关内容