
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
$SHELL
speichert Ihre Standard-Shell, nicht Ihre aktuelle Shell. Versuchen Sie echo $0
stattdessen:
$ echo $SHELL
/bin/bash
$ echo $0
dash