`.bashrc`を更新して再ロードしてください。

`.bashrc`を更新して再ロードしてください。

スクリプトの下部にいくつかの行を挿入するスクリプトがあります。スクリプトが完了した後もこれらの変更を維持できるように、スクリプトからこれらの行をインポートする.bashrc方法はありますか?.bashrcMWEなどのスクリプトは次のとおりです。

#!/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

おすすめ記事