bashスクリプトで生成された関数を.bashrcの関数のように保つにはどうすればよいですか?

bashスクリプトで生成された関数を.bashrcの関数のように保つにはどうすればよいですか?

私の.bashrcが少し長くなっているので、テーマに従って小さなファイルに分割し、次のように.bashrcからこのファイルを呼び出すことにしました。

#my long .bashrc file
bash .topic1rc
bash .topic2rc

しかし、これらの添え字の1つ内にbash関数を作成します。残念ながら、すべてを塊に分割する前のように、もはや動作しません。 .bashrcファイルを複数のチャンクに分割しながら、私が生成した変数と関数にアクセスし続けるにはどうすればよいですか?

答え1

あなたの質問を正しく理解したら、あなたの文書が必要sourceです.。たとえば、あなたの.bashrc注文とメンテナンス(あなただけが知っている):

source .topic1rc
source .topic2rc

source.使いやすくするために、コマンドラインからこのコマンドを短縮できます。これはまったく同じコマンドです。それがすることは、source呼び出されたスクリプトを効果的にインライン化することです。

答え2

bash .topic1rc各プロセスが新しいbashシェルを子プロセスとして呼び出し、環境、シェル変数、または関数と通信する方法がないため、実行中の操作は機能しません。後ろに興味のあるbashシェルである親プロセスに移動します。

あなたが望むのは、この.コマンドを使用することです。 (より詳細なコマンドも可能ですsource。両方のコマンドは同じことを行います。)これは、新しいシェルではなく現在のシェルから指定されたスクリプトを読み取ります。だから:

#my long .bashrc file
. ~/.topic1rc
. ~/.topic2rc

(主にログインするとメインが実行され、ホームディレクトリが初期作業ディレクトリであるため、パスを省略するほとんどすべての用途にはうまく機能しますが、~/.bashrcスペルを指定する方が良いでしょう。)

答え3

他の人が説明したように、これらのスクリプトは実行後に終了する新しいシェルで実行されます。ファイルソースを取得するには、次のいずれかの方法を使用する必要があります。

. .topic1rc

または

source .topic1rc

さらに追加したい場合は、.bashrcの編集を必要としない少し高度なソリューションを作成することもできます。彫刻未来。

すべての設定ファイルを1つのディレクトリ(たとえば)に配置してから、そのディレクトリをファイルの唯一のコンテンツ~/.bash.dにすることができます。.bashrc

if [[ -d ~/.bash.d ]]
then
    for conf_file in ~/.bash.d/*
    do
        if [[ -f $conf_file ]]
        then
            source "$conf_file"
        fi
    done
fi

これにより、.bash.dの下のすべてのbash構成ファイルがインポートされ、ファイル名に基づいてアルファベット順にインポートされるため、これが発生する順序を制御できます。

答え4

sourceorコマンドを使用すると、デフォルトでは.bashはファイル引数に文字が$PATH含まれていない場合に検索されます/。欲しい

source ./.topic1rc 

または

shopt -u sourcepath
source .topic1rc

関連情報