まだ定義されていないコマンドに基づいて関数を作成するには?

まだ定義されていないコマンドに基づいて関数を作成するには?

私のセッションにいくつかの環境設定をロードするいくつかのスクリプト(私の制御の範囲外)があります。したがって、ロードしたいときはいつでも一連のコマンドを実行する必要があります。

export SOME_VAR=/path/to/main/folder
source $SOME_VAR/loading/stuff.sh --quiet
loadApp1
loadApp2
loadApp3
loadApp4

1つのコマンドでこれを実行したいので、関数(ほぼ上の行)を作成しましたが、うまくいきません。

私の考えでは、これはloadAppsがエイリアスであり、stuff.shBashが私の関数を解析するときにまだエイリアスを知らないからだと思います。

移植性を失うことなく単一のコマンドを使用してこれを行うにはどうすればよいですか?

$HOME/.bashrcPS:エイリアスは他の場所で変更できますが、表示されないため、エイリアスをコピーしたくありません。

答え1

エイリアスの場合は、次のように書く必要があります。

myFunction() {
  export SOME_VAR=/path/to/main/folder
  . "$SOME_VAR/loading/stuff.sh" --quiet
  eval '
  loadApp1
  loadApp2
  loadApp3
  loadApp4'
}

読み取り/解析時にエイリアスが拡張されます。evalそのような解析を強制します。

答え2

安全のため、スクリプトを使用して以下を行います。

#!/usr/bin/env bash
export SOME_VAR=/path/to/main/folder
source $SOME_VAR/loading/stuff.sh --quiet
loadApp1
loadApp2
loadApp3
loadApp4

ただ保存し$PATH、実行可能にし、関数の代わりに実行してください。

答え3

不明なコマンドを含む関数を宣言するのに問題はありません。実行しようとするまで問題は発生しません。

$ unknown() { foo; bar; baz; }
$ unknown
bash: foo: command not found
bash: bar: command not found
bash: baz: command not found

関連情報