ฉันมีสคริปต์ต่อไปนี้:
#!/bin/bash
set -x
if :; then
echo a
fi
ถ้าผมทำงานbash /tmp/file
, a
สะท้อน แต่ถ้าผมทำงานsource /tmp/file
ผมจะได้รับ:
bash: /tmp/test: line 6: syntax error: unexpected end of file
ผลลัพธ์:
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
ผลลัพธ์ของคำสั่งshopt -p
และset -o
: http://pastebin.com/bsqc8aru
ผลลัพธ์ของset
: http://pastebin.com/S9KpqZAL
declare -fp
ผลิตอะไร
ฉันคิดว่าsource
มันทำเหมือนกันbash
แต่แทนที่จะเริ่มต้นเซสชันใหม่แทนที่จะรันโค้ดในปัจจุบัน ใครช่วยอธิบายข้อผิดพลาดนี้ให้ฉันได้บ้าง
ฉันใช้ bash GNU bash, รุ่น 4.2.53 (1) - ปล่อย (x86_64-redhat-linux-gnu)
$BASH_ENV
ชุดหรือไม่
bash -c
คำถามของคุณ จากนั้นแสดงเนื้อหาของ~/.bashrc
ไฟล์ของคุณให้เราเห็นอาจมีบางอย่างที่ทำให้สกรูของขึ้น