Ich habe das folgende Skript:
#!/bin/bash
set -x
if :; then
echo a
fi
Wenn ich renne bash /tmp/file, awird es wiedergegeben, aber wenn ich renne source /tmp/file, bekomme ich:
bash: /tmp/test: line 6: syntax error: unexpected end of file
Die Ausgabe:
knezi@holly tmp]$set -x; source /tmp/test; set +x
+ source /tmp/test
++ set -x
bash: /tmp/test: line 6: syntax error: unexpected end of file
+ set +x
knezi@holly tmp]$set -x; command source /tmp/test; set +x
+ set -x
+ command source /tmp/test
+ source /tmp/test
++ set -x
bash: /tmp/test: line 6: syntax error: unexpected end of file
+ set +x
knezi@holly tmp]$bash -c "source /tmp/test"
+ bash -c 'source /tmp/test'
++ :
++ echo a
a
knezi@holly tmp]$od -c /tmp/test
0000000 # ! / b i n / b a s h \n s e t
0000020 - x \n i f : ; t h e n \n \t e
0000040 c h o a \n f i \n
0000051
Ausgabe von Befehlen shopt -pund set -o: http://pastebin.com/bsqc8aru
Ausgabe von set: http://pastebin.com/S9KpqZAL
declare -fp produziert nichts.
Ich dachte, das sourcemacht dasselbe wie bash, aber anstatt eine neue Sitzung zu starten, wird der Code in der aktuellen ausgeführt. Kann mir jemand diesen Fehler erklären?
Ich starte bash GNU bash, Version 4.2.53 (1) -release (x86_64-redhat-linux-gnu).
$BASH_ENVSet?
bash -cdeiner Frage funktioniert . Dann zeigen Sie uns den Inhalt Ihrer ~/.bashrcDatei, da ist wahrscheinlich etwas, das die Dinge vermasselt.