スクリプトの下部にいくつかの行を挿入するスクリプトがあります。スクリプトが完了した後もこれらの変更を維持できるように、スクリプトからこれらの行をインポートする.bashrc
方法はありますか?.bashrc
MWEなどのスクリプトは次のとおりです。
#!/bin/bash
echo "export MyDir='MyAnalysis'" >> ~/.bashrc
echo "alias llA='ll MyAnalysis'" >> ~/.bashrc
source ~/.bashrc
スクリプトの実行後に手動でインポートしない限り、ファイルは使用できませMyDir
ん。llA
.bashrc
ベストアンサー1
間接的。
スクリプトは対話型シェルとは異なるプロセスで実行されます。スクリプトシェル この環境に加えたすべての変更は、スクリプトシェルが終了すると失われます。子プロセスは親プロセスの環境を変更できません。
あなたができること:
このスクリプトは.bashrcを更新し、他の操作は実行しません。スクリプトが正常に完了すると、bashrcを受け取ります。
bash yourScript.bash && source .bashrc
このスクリプトは.bashrcを更新し、印刷sourceコマンド:他の内容が印刷されないことを確認してください。次に
eval
スクリプトを実行します。eval "$(bash yourScript.bash)"
このスクリプトは.bashrcを更新し、返品それが何であるかを印刷します。あなたはそれを評価します:これはスクリプトです
#!/bin/bash exec > >(tee -a "$HOME/.bashrc") echo "export MyDir='MyAnalysis'" echo "alias llA='ll MyAnalysis'"
次に、次のように実行します。
eval "$(bash yourScript.bash)"
更新しない親シェルですが、bashrcを読むには、新しいインタラクティブシェルを起動します。
#!/bin/bash { echo "export MyDir='MyAnalysis'" echo "alias llA='ll MyAnalysis'" } >> ~/.bashrc exec bash -i
親シェルは更新されません。
.bashrc 更新コードを次に設定した場合機能、関数は現在のシェルで実行されているため(デフォルトでは)期待どおりに機能します。
addMyAnalysis() {
echo "export MyDir='MyAnalysis'" >> ~/.bashrc
echo "alias llA='ll MyAnalysis'" >> ~/.bashrc
source ~/.bashrc
}
別の手法: "conf"ディレクトリを作成します$HOME/.bash.d
。内部にbashファイルを書き込む
# this is "~/.bash.d/some_file.bash"
export MyDir='MyAnalysis'
alias llA='ll MyAnalysis'
そして、.bashrcはそのディレクトリのすべてのbashファイルを参照します。
if [[ -d ~/.bash.d ]]; then
shopt -s nullglob
for f in ~/.bash.d/*.bash; do
source "$f"
done
shopt -u nullglob
fi