循环的Bash脚本运行正常但在使用source运行时出现语法错误

时间:2015-03-25 22:20:51

标签: linux bash for-loop

我有以下bash脚本

#!/bin/bash
for i in 4 5 6; do
  echo $i
done    

当我运行脚本时,它运行正常:

$ ./testbash 
4
5
6

当我获取相同的脚本时,我得到以下语法错误

$ source testbash
bash: /home/nick/bin/testbash: line 5: syntax error: unexpected end of file

在获取bash文件时是否禁止某些命令?我使用的是GNU bash,版本4.1.2

这是脚本的

的hexdump

$ hexdump -C testbash

00000000  23 21 2f 62 69 6e 2f 62  61 73 68 0a 66 6f 72 20  |#!/bin/bash.for |
00000010  69 20 69 6e 20 34 20 35  20 36 3b 20 64 6f 0a 20  |i in 4 5 6; do. |
00000020  20 65 63 68 6f 20 24 69  0a 64 6f 6e 65 0a        | echo $i.done.|
0000002e

1 个答案:

答案 0 :(得分:1)

有许多原因可以解释为什么采购和执行会产生不同的结果,但是为什么会出现新的bash语法错误的原因要少得多。

运行env -i bash --norc以获得一个干净的shell,以便检查它是否与您当前的shell相关。

如果源代码在这个干净的shell中工作正常,请将以下命令的输出与它失败的shell进行比较:

  1. alias(如果您更换或引入done等关键字)
  2. shopt(如果您修改extglob
  3. 等语法更改选项
  4. echo $BASH_VERSION(如果您的交互式rc文件最终执行不同的shell)