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


10

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

【システムデータ】

Config directory: /etc/mc/

【ユーザーデータ】

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

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

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

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

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

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

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

回答:


11

思ったより簡単なことです。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_HOMEを通常のHOMEとは異なるディレクトリに設定すると、mcは通常の〜/ .bashrcの内容を無視するため、たとえば、そのファイルで定義されているカスタムエイリアスは機能しなくなります。回避策:〜/ .bashrcへのシンボリックリンクを新しいMC_HOMEディレクトリに追加します
Cri

1

つまり、私ができない限り、異なるconfigディレクトリを使用して、 mcの2つのインスタンスを同じユーザーとして同時に実行できるようにしたいとします。パスはハードコーディングされています。

しかし、もしあなたが意味するなら、あなたはどの設定ディレクトリが使われているのかを切り替えられるようにしたいのです、これがアイデアです(テスト済み、動作します)。あなたはおそらく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ファイルにあり、起動時に読み込まれます(そのため、このようにその場で切り替えることはできません)。その後、「設定を保存」しない限り、終了するまで変更は行われませんが、終了時に上書きされる可能性があるため、ここでの危険は、実行中のインスタンスの外部または以前に行った操作を消去することです。


それは実際に機能します。あなたのアイデアはかなり明確です。ありがとう 私の質問ではそれを明記する必要がありました。構成ディレクトリへのパスは実際にはハードコードされていますが、ユーザーのホームディレクトリ、つまり$ HOMEの値に相対的にハードコードされているため、mc startの前に変更すると、構成ディレクトリの場所が変更されます-チェックしました。欠点は、mcが実行されている限り$ HOMEが変更されたままになることです
。mcに

オリジナルのqを「同じ時間」の条件で拡張しました-前のコメントサイズ制限に適合しませんでした
Tagwint
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.