
私の.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
source
orコマンドを使用すると、デフォルトでは.
bashはファイル引数に文字が$PATH
含まれていない場合に検索されます/。欲しい
source ./.topic1rc
または
shopt -u sourcepath
source .topic1rc