如果你运行
mc -F
你会看到有[系统数据]配置目录和[用户数据]配置目录
[系统数据]
Config directory: /etc/mc/
[用户数据]
Config directory: /home/<username>/.config/mc/
第一个是系统范围的,第二个是用户特定的。
第二个似乎取决于用户的家庭位置;换句话说,它是受它约束的。这意味着如果您想(暂时)以同一用户的备用配置启动 mc,则无法在不更改(和export
ing)之前的 HOME 变量的情况下执行此操作。这种“在启动之前更改主目录”的解决方法虽然可以解决问题,但很难令人接受,因为它确实修改了用户主目录。
你认为有办法吗
在 mc 启动之前动态更改用户配置目录(命令行选项是最合适的,但它似乎不存在)
如果之前更改 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
文件中,该文件在启动时读取(因此您不能以这种方式即时切换)。然后除非您“保存设置”,否则在退出之前不会触及它,但在退出时它可能会被覆盖,因此这里的危险是您删除了之前或在运行实例之外所做的操作。