我有以下脚本:
#!/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)。
1
不,这是完整的代码。换行符是0a。
—
knezi
@Rahul Unix换行符的十六进制代码
—
PSkocik,2016年
是
—
roaima
$BASH_ENV
集合吗?
@PSkocik真的很奇怪。bash -c“源/ tmp / test”有效。
—
knezi
啊哈!请补充说明它适用
—
terdon
bash -c
于您的问题。然后,向我们展示您~/.bashrc
文件的内容,可能是有些东西在搞砸。