Это могло быть вызвано скосом времени. Удостоверьтесь, что все машины получают время от интернет-сервера времени.
Ваш сценарий не должен производить одинарные кавычки. Когда Вы пишете
egrep 'foo|bar'
одинарные кавычки являются частью синтаксиса оболочки. Они защищают символы в них против расширения. Если одинарные кавычки появятся в выводе Вашего сценария, то они будут взяты в качестве обычных символов. Просто опустите их.
Существует намного более легкий способ записать Ваш сценарий: замените новые строки символами вертикальной черты и удалите последний.
list=$(</usr/local/directadmin/data/users/$user/domains.list tr '\n' '|')
echo "${list%|}"
Вы не должны делать этого при поиске фиксированного набора строк. Вместо этого используйте -F
опция к grep
сказать этому искать фиксированные строки, и -f
опция сказать этому читать список шаблонов из файла.
grep -Ff /usr/local/directadmin/data/users/bob/domains.list
Обратите внимание на это, если Вы имеете domain.com
в том файле поиск также возвратит хиты для более длинных строк такой как otherdomain.com
. Таким образом, можно хотеть использовать сценарий для создания шаблона, который имеет привязки вначале и в конце, поэтому избегайте побочного соответствия. Я не знаю, какую пунктуацию журнал exim имеет; например, если бы имена окружаются пробелом, Вы хотели бы что-то как
#!/bin/sh
list=$(</usr/local/directadmin/data/users/$1/domains.list tr '\n' '|')
echo " (${list%|}) "
и назовите его как
</var/log/exim/mainlog grep -E `/path/to/rowscript bob`
Или выполните вызов сценария grep:
#!/bin/sh
shift
list=$(</usr/local/directadmin/data/users/$1/domains.list tr '\n' '|')
grep -E " (${list%|}) " -- "$@"
названный как
</var/log/exim/mainlog /path/to/rowscript bob
Simply omit them.
Хорошо, я пытался опустить их ранее и теперь также. Затем я добавил галочки к egrep'/script/row
'и все еще не имейте никакой удачи 3) спасибо заgrep -Ff
! Это работает довольно хорошее. – Drey 13.11.2011, 22:14echo "'"$list"'"
кому:echo "$list"
. – Gilles 'SO- stop being evil' 13.11.2011, 22:30… | grep -E `/scripts/domainsrow`
Видеть Различие между 'и "на командной строке (удар)? (но обратите внимание, что csh имеет различные правила, таким образом, также читает csh руководство). – Gilles 'SO- stop being evil' 13.11.2011, 23:29