午夜指挥官配置目录位置启动选项


10

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

[系统数据]

Config directory: /etc/mc/

[用户数据]

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

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

第二个似乎取决于用户的家位置。换句话说,它受到约束。这意味着,如果您想(以替代用户身份)(作为临时用户)以同一用户身份启动mc,则无法在不进行更改(和export输入)HOME变量的情况下进行操作。尽管可以解决问题,但这种“更改之前先启动HOME”的解决方法很难接受,因为它确实可以修改用户HOME。

您是否认为有办法

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

  2. 如果在更改MC目录后才更改HOME目录,则在MC启动后立即为用户恢复“自然” HOME

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

Answers:


11

事实证明,这可能更简单。可以在启动mc之前将MC_HOME变量设置为备用路径。手册页不是您可以立即找到答案的东西=)

运作方式如下:-一般方式

[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配置而不覆盖它。并发会话不会互相干扰。

这是https://github.com/Russell91/sshrc中描述的sshrc方法的一部分,效果很好


此解决方案的一个小缺点:如果将MC_HOME设置为与通常的HOME不同的目录,则mc将忽略通常的〜/ .bashrc的内容,因此,例如,在该文件中定义的自定义别名将不再起作用。解决方法:将符号链接添加到〜/ .bashrc到新的MC_HOME目录中
Cri 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 onerm将不会发出此类文件,这没关系。

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

您可以删除killall mc和玩耍而逃脱;配置内容位于ini文件中,该文件在启动时会读取(因此您不能以这种方式即时打开)。直到您退出,除非您“保存设置”,它才会被触摸,但是在退出时,它可能会被覆盖,因此这里的危险是您删除了之前或正在运行的实例之外所做的操作。


确实有效,您的想法很明确,谢谢您的时间。但是我的想法是能够在同一帐户下以不同方式运行不同配置的mc,而不会互相干扰。我应该在我的问题中指明这一点。config dir的路径实际上是硬编码的,但是它相对地硬编码到用户的home dir,即$ HOME的值,因此在mc start之前更改它会更改config dir的位置-我已经检查过。缺点是只要mc运行,$ HOME就会保持更改,如果mc有一种启动钩子可以将还原到原始HOME放入,则可以解决此问题
Tagwint 2014年

我伸出我的“同时”情况原来q -它不适合我的上一个注释大小限制
Tagwint
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.