どのようにあなたはあなたの分割する必要があります.BASHRCまたは.zshrcファイル


スケーラブルなbash/zsh起動スクリプトだけでいくつかの行

目的

  • 割る.bashrc/.zshrc 複数のファイルにzshrc 古いものを一つずつロードします.
  • for FILE in ~/zshrc/*; do  
        source $FILE  
    done
    

    背景

    .bashrc/.zshrc は主に端末アプリケーションを起動するときに実行される.通常、私たちのワークフローを助けるために、カスタムエイリアス/ショートカット、関数/コマンド、シェル変数、および環境変数が含まれます.
    しかし、これは様々なフレームワーク、ユーティリティ、またはプロジェクトと一緒に時間をかけて簡単に厄介になる可能性があります.仕事でさえ、我々は生産性/効率を押し上げるために繰り返しのタスク/コマンドを自動化する必要があるかもしれません.したがって、我々は時々これらのファイルを更新します.最初に小さな庭は、それから維持するのが難しい濃い森に進化することができました.

    VIM設定の分割


    私は長い間持っていた.vimrc/init.vim 設定前に、私はよりモジュラーであるため、それを分割し、メインローダは、新しいファイルでも自動検出/ロードすることができます.メイキングmy settings よりスケーラブル
    runtime settings.vim                               
    runtime plugins.vim  
    runtime mappings.vim                                                          
    
    " `!` is needed to load all files in the folder.                             
    runtime! themes/*.vim                               
    runtime! plugins-config/*.vim
    

    ZSH設定の分割


    同様に、私は1500以上の線を私の.zshrc 前と今it just have a few lines . 以下、簡略化した版について説明する.ほとんどの人にも簡単なユースケースがあります.
    CONFIGS=$HOME/dev/configs                                                           
    source $CONFIGS/zshrc/init.sh                                                                                    
    
    FILES_STR=$(fd --glob '*.sh' --exclude 'init.sh' $CONFIGS/zshrc)  
    FILES=($(echo $FILES_STR | tr '\n' ' '))                                                                                      
    
    for FILE in $FILES; do                                   
        source $FILE                               
    done
    

    利益


    モジュールの設定をすることは、以下の理由により良い実行です.
  • 関連コンテンツは、懸念のより良い分離を意味するグループ化されます.
  • 将来の分割ファイルも更新せずに自動ロードされるので、システムはよりスケーラブルになります.zshrc .
  • 最初にコンテンツを分割すると、すべての設定を1つずつ確認し、古い、未使用、または重複したものを検出することを強制します.これはシェルスクリプトの詳細については、繰り返しパターンがあることに気づくでしょうし、より良いコードの再利用のために抽出することができるように強制的になります.最終結果はleanerシステムです.シェルスクリプトはtop paying tech as per the latest StackOverflow survey .
  • 分散ソース


    ここでのコマンドは主にzsh ( .zshrc ), しかし、アイデアはあなたが使用しても同じですbash ( .bashrc/.bash_profile ) その他のシェル.

    1 .スクリプトフォルダの作成


    分割ファイルを含むターゲットフォルダを作成する必要があります.簡単にするために、我々は~/zshrc フォルダ(すなわち、それをメインから区別する点なしで)~/.zshrc ファイル).

    2 .スクリプトファイルの作成


    コンテンツの見直しを始めることができました.zshrc ファイル.次に、以下のファイルのようなトピックごとに関連する内容をグループ化します.ファイル拡張子は問題ではないことに注意してくださいsource シェルコマンドはファイルの内容を気にかけます.私はちょうど.sh の一般/傘用語としてzsh and bash シェル
    ~/zshrc  
      ├── git.sh  
      ├── js.sh   
      ├── python.sh  
      ├── django.sh  
      ├── docker.sh  
      ├── general.sh  
      ├── init.sh
    
    それから、2つの特別なファイルを持つことができました.
  • init.sh シェルが必要とするものを含みます(zsh ) 初期化子、プラグイン、テーマなど.
  • general.sh は、現在の分割ファイルに属していないすべてのものが含まれており、あまりにも少数の専用ファイルを警告する.これは簡単に分類することができなかったもののためのデフォルトのファイルになります.
  • メインローダの更新


    では、~/.zshrc これを単にロード/ソースにすることができます.sh フォルダ内のファイルを分割します.あなたは*.sh 代わりに* 具体的には
    for FILE in ~/zshrc/*; do  
        source $FILE  
    done
    
    したがって、この論理構造を持ちます.
    ~/.zshrc  
    ~/zshrc  
      ├── git.sh  
      ├── js.sh   
      ├── python.sh  
      ├── django.sh  
      ├── docker.sh  
      ├── general.sh  
      ├── init.sh
    

    将来更新


    現在、スケーラブルなシステムがあります.将来の変更
  • 新しいalias/command/envvarが一般的な分割ファイルに入れられるかどうかを調べます(例えばgit.sh , python.sh , などを入れて
  • それがどこに属しないならば、ちょっとそれを入れてくださいgeneral.sh デフォルト先
  • 一度、関連するものの重要な数がすでにありますgeneral.sh , あなたは、新しい専用/分割ファイルにそれらを置くことができます.
  • この美しさは~/.zshrc ウィルオートも新しく追加されたファイルをロードします.したがって、その内容を更新する必要はありません.

    クリティカルソース


    上記のコマンドで問題がない場合、他の人はこの時点で停止することがあります~/.zshrc . しかし、時々、他のスクリプトの前に最初にロードされる必要があるスクリプトがありますinit.sh .
    これを解決するための様々な戦略がありますが、最も簡単な方法は以下の通りです.
  • 最初に読み込むinit.sh
  • 次に、他のスクリプトを読み込みます
  • ユーティリティの使用


    こうすることができました.
    # Load the 'init.sh'.  
    source ~/zshrc/init.sh
    
    # Find all '.sh' files in ~/zshrc, exclude 'init.sh'.  
    FILES_STR=$(find ~/zshrc -name '*.sh' -not -name 'init.sh')
    
    # `tr` is a find-and-replace utility.  
    # Outer () will convert the output of $() to array.  
    FILES=($(echo $FILES_STR | tr '\n' ' '))
    
    for FILE in $FILES; do  
        source $FILE  
    done
    

    fdユーティリティの使用


    あなたがファンであるならばfd 私のように、それは現代の/より速いバージョンのfind , あなただけを変更する必要がありますFILES_STR
    # Load the 'init.sh'.  
    source ~/zshrc/init.sh
    
    # Find all .sh files in ~/zshrc, exclude 'init.sh'.  
    FILES_STR=$(fd --glob '*.sh' --exclude 'init.sh' ~/zshrc)
    
    # 'tr' is a find-and-replace utility.  
    # Outer () will convert the output of $() to array.  
    FILES=($(echo $FILES_STR | tr '\n' ' '))
    
    for FILE in $FILES; do  
        source $FILE  
    done
    

    キーテイクアウト

  • シェルの起動スクリプトは非常に効率/生産性を向上させるために便利です.
  • 単一のソースからの間のパフォーマンスには、観測可能な違いはありません.zshrc/.bashrc またはスプリットファイルからソーシングする.
  • ファイルの分割は、より良いモジュラリティ、懸念の分離、スケーラビリティを意味します.今後のアップデートは、より簡単に管理されます.
  • 各々のファイルのより小さな範囲は時代遅れで未使用のものを検出するのがより簡単であることを意味します.その後、プロセスはシェルスクリプトのスキルを強化することができます.
  • 重要なファイルを最初にロードすることができます.私たちはfind/fd CLIユーティリティを見つける/ファイルを除外します.
  • お読みありがとうございます.いくつかの値を見つけた場合は、親切に従って、または記事にコメント/コメントを与えるかbuy me a coffee . これは私に多くのことを意味し、私はより高品質のコンテンツを作成することをお勧めします.