Linux シェル スクリプトでソースをオーバーライドするにはどうすればよいですか?

Linux シェル スクリプトでソースをオーバーライドするにはどうすればよいですか?

私のチームはシェル スクリプトを共有しています。Windows を使用しているのは私だけなので、これを Cygwin 互換にしたいと考えています。問題は にありますsource。私のシェルは次のような形式のみを受け入れます。

source ./<file name>

の代わりに

source <file name>

これはすでにスクリプト内にあります。したがって、source次のように上書きします。

source(){ . ./$@; }

しかし、今私のシェルは次のように文句を言っています:

`source': is a special builtin

今のところ何をすればいいでしょうか?

答え1

特別な組み込み関数に関するエラーメッセージ(http://sources.debian.net/src/bash/4.4-4/execute_cmd.c/?hl=5623#L5623) の場合、bash を POSIX モードで実行しているようです。これは、 を$POSIXLY_CORRECT設定し、 でシェルを実行し--posix、 を使用したことset -o posixなどが原因である可能性があります。

POSIX モードが行う多くのことの 1 つは ( を上書きできないことに加えてsource)、-lookup が失敗した場合にsource(および.) 現在の作業ディレクトリを検索しないようにすることです。$PATH

これは Cygwin 上での実行とは関係ありません。

関連情報