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ď č. 1Existuje 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á:
alias
(v prípade, že nahradíte alebo zadáte kľúčové slová, ako jedone
)shopt
(ak zmeníte možnosti na zmenu syntaxe, napríkladextglob
)echo $BASH_VERSION
(v prípade, že vaše interaktívne súbory rc skončia vykonaním inej zložky)