Вы можете:
#! /bin/sh -
while [ "$#" -ge 2 ]; do
proto=$1 port=$2
shift 2
iptables --append INPUT --protocol "$proto" --destination-port "$port" \
--match state --state NEW --jump ACCEPT || exit 1
done
С помощью zsh
:
#! /bin/zsh -
for proto port do
iptables --append INPUT --protocol "$proto" --destination-port "$port" \
--match state --state NEW --jump ACCEPT || exit 1
done
Одно отличие состоит в том, что при нечетном количестве аргументов будет выполнено дополнительное выполнение с $ proto
, содержащим последний аргумент, и $ port
установленным, но пустым (как если бы мы использовали ["$ #" -gt 0]
вместо ["$ #" -ge 2]
в предыдущем примере).
Попробуйте annotate-output
из пакета Debian devscripts . Он показывает временные метки и пишет «O» перед стандартным выводом и «E» перед стандартной ошибкой. Пример:
# run `ls` on one file that exists, and one that doesn't...
annotate-output ls /bin/bash /tmp/boosh
Вывод:
03:30:52 I: Started ls /bin/bash /tmp/boosh
03:30:52 O: /bin/bash
03:30:52 E: ls: cannot access '/tmp/boosh': No such file or directory
03:30:52 I: Finished with exitcode 2
Вы можете использовать ts (1)
из moreutils.
ts
из moreutils добавит временную метку к каждой строке ввода, которую вы ему вводите. Вы также можете отформатировать его с помощью strftime.
$ echo 'foo bar baz' | ts
Mar 21 18:07:28 foo bar baz
$ echo 'blah blah blah' | ts '%F %T'
2012-03-21 18:07:30 blah blah blah
$
Чтобы установить его:
sudo apt-get install moreutils
Содержимое скопировано из этого ответа: https://stackoverflow.com/a/9813614/221689