Вот что у меня в итоге получилось:во многом благодаря RobotJohnny.
ns () {
echo ""
while sleep 1; do
IFS=$'\n'
for line in $(lsof -Pi |
grep ESTABLISHED |
grep -ve "localdomain:[0-9]*.EST" \
-e "search.msn.com:[0-9]*.EST" \
-e "spider.yandex.com:[0-9]*.EST" \
-e "google.com:[0-9]*.EST"); do
cmdpidusr=$(echo $line | awk -v OFS='\t' '{print $1, $2, $3}')
node=$(echo $line | awk '{print $8}')
ipadd=$(echo $line | awk '{print $9}' | cut -d ">" -f 2 | cut -d ":" -f 1)
port=$(echo $line | awk '{print $9}' | cut -d ">" -f 1 | cut -d ":" -f 2 | cut -d "-" -f 1)
geoip=$(geoiplookup $ipadd | sed "s/GeoIP.*: \S* //g")
echo -e "$cmdpidusr\t$node\t$port\t$ipadd\t$geoip" | sed "s/\s*resolve hostname.*//g" | grep -v root
done | column -t -s $'\t' | sed "s/ \s*/ /g"
unset IFS
done
}
Подстановочные знаки в командной строке ("/var/log/somelogs/*
" )раскрываются сначала (до того, как cp
начнет выполняться ). Если результирующий список файлов содержит имя файла, которого больше не существует (из-за того, что выполнялась ротация журналов, когда cp
копировал более ранние файлы ), cp
будет жаловаться, попытается использовать следующий файл и вернет не -нулевой статус выхода(bash
переменная$?
). См. man cp
.
См. расширение с подстановочными знаками;
echo cp /var/log/somelogs/*./temp