Bash erstellt keine Quelldatei, sofern es nicht manuell gestartet wird

Bash erstellt keine Quelldatei, sofern es nicht manuell gestartet wird

bash wird keine Dateien von einem Login-Terminal beziehen, es sei denn, ich führe bash manuell von einem Terminal aus, ich habe bash (und nicht sh oder dash). Wenn ich eine Datei als Quelle verwende, werden Fehler zurückgegeben (wie „Syntaxfehler nahe unerwartetem“), es sei denn, ich führe bash nicht aus$ bashvor der Quelle

$echo $TERM
screen-256color

$echo $SHELL
/bin/bash

$shopt login_shell
login_shell     on

Fehler:

$source  ./shrc
-bash: ./shrc: line 105: syntax error near unexpected token `('

$bash 
$source ./shrc <-- now it works

Irgendwelche Ideen?

AKTUALISIERUNG 1

Wenn ich Bash ausführe, melde ich mich in der Nicht-Login-Shell an und es funktioniert. Warum kann die Login-Shell die Quelldatei nicht aufrufen?

AKTUALISIERUNG 2

$echo $0
-bash

$bash
$echo $0
bash

AKTUALISIERUNG 3

  else
        echo;
        echo "The SPEC environment variable is not set! Please source the shrc and try again."
        echo;
    fi
  }

  ogo() {   <----- LINE 105
      SHRC_NO_GO=0
      TOP=$SPEC
      if [ "x$TOP" != "x" ]; then
          if [ "x$1" = "x--help" -o "x$1" = "x-h" ]; then

Es handelt sich um eine Datei aus den SPEC2006-Benchmarks (es handelt sich um ein bekanntes Programm, nicht um meinen Code). Ich gehe davon aus, dass es korrekt ist. (Tatsächlich funktioniert es in einer Shell ohne Login.)

Antwort1

$SHELLspeichert Ihre Standard-Shell, nicht Ihre aktuelle Shell. Versuchen Sie echo $0stattdessen:

$ echo $SHELL
/bin/bash
$ echo $0
dash

verwandte Informationen