Ich brauche Hilfe mit dem folgenden Bash v4.1.2-Skript.Bash-Skript-Befehl, der nicht ausgeführt wird
#!/bin/bash
IP=$1
IPTABLES=/sbin/iptables
$IPTABLES -I INPUT -s $IP -j DROP
echo $IPTABLES -I INPUT -s $IP -j DROP |wall
Die Variablen, IP
und IPTABLES
, in den echo
bevölkerten erhalten, aber die Zeile oben wird nicht ausgeführt. Die Echo-Ausgänge ...
/sbin/iptables -I INPUT -s 1.2.3.4 -j DROP
..., die syntaktisch korrekt ist und funktioniert, wenn sie manuell ausgeführt.
Ich weiß Bash nicht, also kämpfe ich um dieses elementare Skript zu debuggen. Ich sehe einige Szenarien, in denen Befehle leer sind, wie ich meine und einige, die in $()
(mit und ohne Anführungszeichen) verpackt sind. Ich habe auch versucht, Backticks zu verwenden und verschiedene Teile des Befehls zu zitieren. Die echo
Pipe über wall
existiert nur zum Debuggen.
Ich fand eine im Grunde identische Post bei Bash script commands not working in cron. Mein Skript läuft jedoch nicht von Cron.
=== EDIT ===
Added für @Barmar
[[email protected] tmp]# bash -x /bin/netfilter-drop.sh
+ IP=1.2.3.4
+ IPTABLES=/sbin/iptables
+ /sbin/iptables -I INPUT -s 1.2.3.4 -j DROP
+ wall
+ echo /sbin/iptables -I INPUT -s 1.2.3.4 -j DROP
[[email protected] tmp]#
Broadcast message from [email protected] (Thu Dec 29 12:46:44 2016):
/sbin/iptables -I INPUT -s 1.2.3.4 -j DROP
^C
[[email protected] tmp]#
Es sollte gut funktionieren. Was lässt dich denken, dass es nicht ausgeführt wird? – Barmar
Die Regel wird netfilter nicht hinzugefügt. Die Regel wird von iptables nicht angezeigt. – user1801810
Stellen Sie sicher, dass die Datei keine CRLF-Zeilenenden aufweist. Wenn Sie eine Unix-Datei unter Windows bearbeiten, verwenden Sie 'dos2unix', um das Problem zu beheben. – Barmar