Tôi có đoạn script sau:
#!/bin/bash
set -x
if :; then
echo a
fi
Nếu tôi chạy bash /tmp/file
, a
được lặp lại, nhưng nếu tôi chạy source /tmp/file
, tôi nhận được:
bash: /tmp/test: line 6: syntax error: unexpected end of file
Đầu ra:
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
Đầu ra của các lệnh shopt -p
và set -o
: http://pastebin.com/bsqc8aru
Đầu ra của set
: http://pastebin.com/S9KpqZAL
declare -fp
sản xuất không có gì.
Tôi nghĩ rằng source
nó cũng giống như vậy bash
, nhưng thay vì bắt đầu phiên mới thay vì chạy mã trong phiên hiện tại. Bất cứ ai có thể giải thích lỗi này cho tôi?
Tôi chạy bash GNU bash, phiên bản 4.2.53 (1) -release (x86_64-redhat-linux-gnu).
$BASH_ENV
bộ?
bash -c
câu hỏi của bạn. Sau đó, cho chúng tôi xem nội dung của ~/.bashrc
tập tin của bạn , có thể có thứ gì đó đang làm hỏng mọi thứ.