web-dev-qa-db-ja.com

真夜中の司令官構成ディレクトリの場所の起動オプション

mc -Fを実行すると、[システムデータ]構成ディレクトリと[ユーザーデータ]構成ディレクトリが表示されます。

【システムデータ】

Config directory: /etc/mc/

【ユーザーデータ】

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

1つ目はシステム全体、2つ目はユーザー固有です。

2つ目は、ユーザーの自宅の場所に依存しているようです。言い換えれば、それはそれにバインドされています。つまり、同じユーザーとして別の構成でmcを(一時的に)開始する場合、その前のHOME変数を変更(およびexporting)せずにそれを行うことはできません。この「Changing-HOME-prior-to start」回避策は、トリックを行いますが、ユーザーのHOMEを変更するため、受け入れがたいものです。

あなたはどちらかに方法があると思いますか

  1. Mcが開始する前にユーザー構成ディレクトリを動的に変更します(コマンドラインオプションが最も適切ですが、そこにはないようです)。

  2. Mcの開始直後にユーザーの「自然な」HOMEを復元します(以前にHOMEを変更することがユーザーdirの場所を変更する唯一の方法である場合)

異なる方法で構成されたmcインスタンスは、同時に実行する場合、互いに干渉してはなりません。

10
Tagwint

思ったより簡単なことです。 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の一部としてうまく機能します

11
Tagwint

つまり、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 onermは、そのようなファイルがないことを示しますが、それは問題ではありません。

うまくいけば、そこで何が起こっているのかは明らかです。これにより、configディレクトリパスがシンボリックリンクとして設定されます。ここで行って保存した構成の変更は、oneディレクトリに保存されます。その後、終了してswitch_mc twoを実行し、以前の設定に戻してから、mcをもう一度起動し、変更を加えて保存することができます。

killall mcを削除して遊んでみれば、問題は解決します。構成情報は、起動時に読み込まれるiniファイルにあります(そのため、このようにその場で切り替えることはできません)。その後、「設定を保存」しない限り、終了するまで触れられませんが、終了時に上書きされる可能性があるため、ここでの危険は、実行中のインスタンスの以前または外部で行った操作を消去することです。

1
goldilocks