/ / Bash skript pre slučku beží dobre, ale dáva chybu syntaxe pri spúšťaní so zdrojom - linux, bash, for-loop

Bash skript pre slučke beží v poriadku, ale dáva Syntaktická chyba spustenia s source - linux, bash, pre-slučky

Mám nasledujúci bash skript

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

Keď spustím skript, funguje to dobre:

$ ./testbash
4
5
6

Pri zdroji toho istého skriptu dostanem nasledujúcu chybu syntaxe

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

Sú niektoré príkazy zakázané pri získavaní súboru bash? Používam GNU bash, verzia 4.1.2

Tu je hexdump skriptu

$ 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

odpovede:

1 pre odpoveď č. 1

Existuje mnoho dôvodov, prečo získavanie a vykonávanie by prinieslo odlišné výsledky, ale oveľa menej, prečo by ste dostali novú chybu syntaxe bash.

beh env -i bash --norc aby ste získali čistú škrupinu, aby ste mohli skontrolovať, či súvisí s vašou súčasnou škrupinou.

Ak zdroj funguje dobre v tomto čistom shell, porovnajte výstupy z nasledujúcich príkazov s shell, kde to zlyhá:

  1. alias (v prípade, že nahradíte alebo zadáte kľúčové slová, ako je done)
  2. shopt (ak zmeníte možnosti na zmenu syntaxe, napríklad extglob)
  3. echo $BASH_VERSION (v prípade, že vaše interaktívne súbory rc skončia vykonaním inej zložky)