Риск оказаться излишним (но я не вижу, чтобы кто-то еще прямо сказал об этом ), причина, по которой ваш
echo {0..9} | xargs -n 2 $(echo 'echo | tac')
Команда делает то, что она делает, так это то, что она эквивалентна
echo {0..9} | xargs -n 2 'echo' '|' 'tac'
Сравните с
echo {0..9} | xargs -n 2 echo foo bar
Это происходит потому, что $(echo …)
оценивается после общей структуры командной строки(echo (something) | xargs (args)
)был проанализирован, поэтому вывод из $(echo …)
может быть только добавьте аргумент (s )в команду xargs
. Чтобы делать то, что вы хотите, так, как вы хотите, вам нужно сказать
echo {0..9} | eval xargs -n 2 $(echo 'echo | tac')
Обратите внимание, что eval
может быть опасным. Поищите на этом сайте предупреждения об этом и прислушайтесь к ним.
Вы не можете использовать одно и то же имя действия дважды в одной и той же тюрьме. Вот это "iptables". Обратите внимание, что name=
— это имя параметра, ориентированного на действие (, параметр времени выполнения действия, в случае iptables это часть цепочки, например f2b -), но не само имя действия.
Чтобы преодолеть это, вам нужно ввести другое имя акта:
action = iptables[actname=HTTP, name=HTTP, port=http, protocol=tcp]
iptables[actname=HTTPS, name=HTTPS, port=https, protocol=tcp]