mc -F
を実行すると、[システムデータ]構成ディレクトリと[ユーザーデータ]構成ディレクトリが表示されます。
【システムデータ】
Config directory: /etc/mc/
【ユーザーデータ】
Config directory: /home/<username>/.config/mc/
1つ目はシステム全体、2つ目はユーザー固有です。
2つ目は、ユーザーの自宅の場所に依存しているようです。言い換えれば、それはそれにバインドされています。つまり、同じユーザーとして別の構成でmcを(一時的に)開始する場合、その前のHOME変数を変更(およびexport
ing)せずにそれを行うことはできません。この「Changing-HOME-prior-to start」回避策は、トリックを行いますが、ユーザーのHOMEを変更するため、受け入れがたいものです。
あなたはどちらかに方法があると思いますか
Mcが開始する前にユーザー構成ディレクトリを動的に変更します(コマンドラインオプションが最も適切ですが、そこにはないようです)。
Mcの開始直後にユーザーの「自然な」HOMEを復元します(以前にHOMEを変更することがユーザーdirの場所を変更する唯一の方法である場合)
異なる方法で構成されたmcインスタンスは、同時に実行する場合、互いに干渉してはなりません。
思ったより簡単なことです。 MC_HOME変数は、mcを開始する前に代替パスに設定できます。 manページはすぐに答えを見つけることができるものではありません=)
仕組みは次のとおりです。-通常の方法
[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-approachの一部としてうまく機能します
つまり、mcの2つのインスタンスを同じユーザーとして実行できるようにしたい同時には、私ができない限り、異なる設定ディレクトリで実行できます。パスはハードコーディングされています。
しかし、もしあなたが意味するなら、あなたはどのconfigディレクトリが使われているのかを切り替えられるようにしたいのです、ここにアイデアがあります(テスト済み、動作します)。あなたはおそらく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
ファイルにあります(そのため、このようにその場で切り替えることはできません)。その後、「設定を保存」しない限り、終了するまで触れられませんが、終了時に上書きされる可能性があるため、ここでの危険は、実行中のインスタンスの以前または外部で行った操作を消去することです。