Strona 1 z 1

[+] Interpreter #!/bin/bash

: 03 lutego 2010, 21:02
autor: LordRuthwen
Witam.
Nie jestem pewny, czy to nadaje się do tego działu czy do programowania, ale raczej tu.

Mam taki problem:
Napisałem sobie skrypt firewalla, troszkę rozbudowany o wywoływanie innego pliku, gdzie mam IP do banowania, plik wygląda tak:

Kod: Zaznacz cały

#!/bin/bash
IPTABLES='/sbin/iptables'
$IPTABLES -A INPUT -s xx.xxx.xx.xxx -j DROP
$IPTABLES -A INPUT -s xx.xxx.xxx.xxx -j DROP
$IPTABLES -A INPUT -s xx.xx.xxx.xx -j DROP
i tak dalej...
Przy wywołaniu pliku wykonuje go, owszem, jednak śmieci mi na wyjściu takim wpisem:

Kod: Zaznacz cały

/etc/init.d/firewall.sh-ban: line 1: #!/bin/bash: No such file or directory
Zaznaczam, to nie jest komunikat o złym interpreterze, tamten brzmiałby tak:

Kod: Zaznacz cały

#!/bin/bash^M: bad interpreter: No such file or directory
I byłby spowodowany złym znakiem końca linii.

Możecie mi pomóc jakoś się tego pozbyć?
Niby skrypt działa, ale lubię mieć porządek.
* zamiast tego jest spacja.

: 03 lutego 2010, 21:27
autor: lessmian2
Typuje że masz plik w UTF-8 zapisany z BOM.

Mój plik testowy:

Kod: Zaznacz cały

#!/bin/bash
echo test
Uruchomienie:

Kod: Zaznacz cały

# ./test.sh 
./test.sh: line 1: #!/bin/bash: Nie ma takiego pliku ani katalogu
test
Sprawdzić czy plik zawiera BOM, można np. tak:
# hd test.sh
00000000 ef bb bf 23 21 2f 62 69 6e 2f 62 61 73 68 0a 0a |...#!/bin/bash..|
00000010 65 63 68 6f 20 74 65 73 74 0a |echo test.|
0000001a
Pogrubiona sekwencja to właśnie BOM. Usunąć ją można np. w vim'ie za pomocą

Kod: Zaznacz cały

:set nobomb
i zapisując plik.

: 03 lutego 2010, 22:01
autor: LordRuthwen
Dziękuję, pomogło :)