環境をセットアップする一連のエイリアスを作成するスクリプト(書き込みアクセス権がないスクリプト)を使用しています。環境をセットアップするためのbash関数を作成したいのですが、エイリアスが関数本体まで存続しないようです。
これは最小限の例です:
# aliases.sh
alias fooAlias='echo "this will never work!"'
。
# .bashrc
function setupLotsOfThings() {
source aliases.sh
fooAlias
}
。
さて、私が単にaliases.sh
インタラクティブにソーシングすると、物事は期待通りに機能します:
[mycomputer]~/ $ source aliases.sh
[mycomputer]~/ $ fooAlias
this will never work!
ただし、代わりに.bashrcで定義されている関数を呼び出すと、その定義を取得した後にエイリアスが認識されません。
[mycomputer]~/ $ setupLotsOfThings
-bash: fooAlias: command not found
ここで何が起こっているのですか?alias
関数で使用する場合、コマンドのスコープについて何か不足していますか?
編集:私が達成しようとしていることにいくつかの光を当てるために、最小限の例を超えていくつかの詳細を追加します。
私の仕事では、クラスターやグリッドで多くのソフトウェアを開発して実行しています。さまざまなgccバージョン、特定のソフトウェアリリース、構成とデータのPATH、さまざまな環境変数など、まったく異なる環境を必要とするプロジェクトがいくつかあります。管理者は、通常、他の関数やエイリアスを呼び出したり、さまざまなスクリプトを実行したりするシェル関数やエイリアスを定義することによって、さまざまなものを設定するスクリプトを提供します。私にとって、それはブラックボックスです。
一つのコマンドで自分だけの様々な環境をセットアップしたい。現在、私は次のようなことをしています:
[mycomputer]~/ $ source /some/environment/setup/script.sh
[mycomputer]~/ $ aliasToSetupSomeSoftwareVersion #this was defined in the above
[mycomputer]~/ $ anotherAliasForOtherSoftware
[mycomputer]~/ $ source /maybe/theres/another/script.sh
[mycomputer]~/ $ runSomeOtherSetup # this was defined in the new script
これらのコマンドは通常、順番に実行する必要があります。私の考えは基本的に上記の行を関数ブロックにコピーすることでしたが、元の例が示すように、それは単に機能しません。代替の回避策は大歓迎です!