Wie überschreibe ich die Quelle in einem Linux-Shell-Skript?

Wie überschreibe ich die Quelle in einem Linux-Shell-Skript?

Mein Team verwendet ein Shell-Skript, ich möchte es Cygwin-kompatibel machen, da nur ich Windows verwende. Das Problem kommt jetzt von source. Meine Shell akzeptiert nur Formate wie:

source ./<file name>

anstatt

source <file name>

das steht bereits im Skript. Ich möchte es also sourcewie folgt überschreiben:

source(){ . ./$@; }

Aber jetzt beschwert sich meine Shell darüber:

`source': is a special builtin

Was soll ich jetzt tun?

Antwort1

Aus dieser Fehlermeldung über ein spezielles Builtin (siehehttp://sources.debian.net/src/bash/4.4-4/execute_cmd.c/?hl=5623#L5623), scheint es, als würden Sie Bash im POSIX-Modus ausführen. Dies kann daran liegen, dass Sie $POSIXLY_CORRECTfestgelegt haben, die Shell mit ausgeführt haben --posix, verwendet haben set -o posixusw.

Eine der vielen Funktionen des POSIX-Modus (zusätzlich dazu, dass Sie nicht überschreiben können source) besteht darin, dass er dafür sorgt, dass source(und .) das aktuelle Arbeitsverzeichnis nicht durchsucht wird, wenn $PATH-lookup fehlschlägt.

Dies hat nichts mit der Ausführung unter Cygwin zu tun.

verwandte Informationen