
Linuxで「union」シンボリックリンクを使用できますか?これが実際の用語であるかどうかはわからないので、概念を説明します。
を含むgitリポジトリがあります~/dotfiles
。ディレクトリへのシンボリックリンクを使用して「アクティブ化」します。たとえば、次のコマンドln -s ~/dotfiles/bash/bash_profile ~/.bash_profile
を実行してリンクを作成します。
~/.bash_profile -> ~/dotfiles/bash/bash_profile
ところで、複数のファイルの内容をマージしたい状況が生じました。たとえば、~/.bash_profile
シンボリックリンクが各ファイルに1つずつ2つの別々のファイルを指すようにしたいとします。たとえば、
~/.bash_profile
(1) -> ~/dotfiles/bash/bash_profile
(2) -> ~/dotfiles/proj/bash_profile
2つのファイル(たとえばcat ~/dotfiles/{bash,proj}/bash_profile > ~/.bash_profile
)を簡単にリンクできることはわかっていますが、シンボリックリンクを使用して同じことができる場合は、そうすることをお勧めします。
そのような機能が存在する場合(Nixはかなり大きい)、後ろから2つの異なるファイルを一緒にマッピングする必要があり、後ろからさまざまな複雑さを隠す必要があると想像します(最初の「マッピング」されていないすべてのファイルマッピング)、ファイルの移動、リンクされたシンボリックリンクの書き込みときにすべてのファイルロックなど)。
そのような機能がない場合は、実装する予定はありますか?
答え1
シンボリックリンクは、「このファイルを他の場所で見つけてください」と言います。シンボリックリンクの内容はターゲットの内容と同じです。いいえ、シンボリックリンクはそうすることはできません。私はシンボリックリンクに関連する機能を見つけようとしないことをお勧めします。それはあなたが望むものではないからです。 「シンボリックリンク接続」という言葉で何が欲しいのかわかりません。
ファイルの内容が複数のファイルの内容を結合した結果になりたいです。これは、システムの一部が組み合わせを実行できる必要があり、必要な組み合わせの種類を説明する必要があることを意味します(私が正しく理解した場合は接続)。
最新のUNIXシステムには、どのような保存方法に関係なく、任意のデータをファイルとして表示する方法があります。ヒューズ。 FUSEを使用すると、ファイルに対するすべての操作(作成、開く、読み取り、書き込み、ディレクトリのリストなど)がプログラムの一部のコードを呼び出し、そのコードは任意の操作を実行できます。より実際にコマンドであるダミーファイルを作成します。。試してみることができますスクリプトファイルシステムまたはヒューズ、または野心があれば、自分で行うことができます。
このユースケースでは、動的生成が正しい選択であるとは思わない。少し複雑で、どこでも動作しません(FUSEはroot以外のユーザーが常にアクセスできるわけではなく、Cygwinでも一部のシステム(Windowsなど)ではまったく使用できません)。私がやったのと同じアプローチを使用することをお勧めします。一部のインクルード機能(.bash_profile
、、、.gitconfig
...)を持つファイルの場合、構成ファイルの1つを変更した場合は、他のファイルにこの方法を使用してくださいmake
。 )アプリケーションから読み取ったファイルを再生成します。
答え2
テキスト処理機能としてのモジュラー構成ファイル
あなたが要求するのは、ファイル処理よりも正確なテキスト処理です。これは、どのプログラムがテキストファイルを使用するかによって大きく異なります。
必要な操作を実行する従来の簡単な方法は、次のようにモジュール式の方法で他のファイルを含むトップレベルファイルを作成することです。
~/.bash_config ファイル:
source ~/dotfiles/bash/bash_profile
source ~/dotfiles/proj/bash_profile
1つの利点は、一時的な変更を実行し、意図を明確に保つために行をコメントアウトできることです。
source ~/dotfiles/bash/bash_profile
# source ~/dotfiles/proj/bash_profile
source ~/dotfiles/proj2/bash_profile
シンボリックリンクディレクトリを使用したスクリプトの管理
ただし、シンボリックリンクを使用してプロファイルのコレクションを管理する場合は、bash
既存のシンボリックリンクの上に「接着剤」をほとんど使用せずにこれを行うことができる実証済みの方法があります。
(を指す)と(を指す)という名前のリンクを使用して(たとえば)というディレクトリを作成し、〜~/.bash_profiles
/ .bash_profileに入れます。00base
~/dotfiles/bash/bash_profile
10proj
~/dotfiles/proj/bash_profile
for file in ~/.bash_profiles/* ; do source $file ; done
その後、ファイルを編集せずにシンボリックリンクを操作して、プロファイルを有効、無効、および並べ替えることができます。 Bashの拡張は語彙順に並べられているので機能します~/.bash_profiles/*
。
これは基本的にinit
クラシックUnix / Linuxがシステム起動スクリプトを管理する方法です。bash
作業中のプロジェクトに応じて選択的にロードできる非常に複雑なカスタムセットがない場合、これは過剰になる可能性があります。