У меня тоже очень плотный график. Планирую побывать примерно в следующих местах:
Завтра - иду на работу.
Послезавтра - иду на работу.
Не исключено, что в пятницу я тоже побываю на работе.
И о работе. Сегодня я взял свою операционную систему, исправил "oneric" на "quantum" в файле /etc/apt/sources.list, скрестил пальцы на удачу, и:
# aptitude updateКак бы не так. Пришлось долго плясать с бубном; а ещё PHP захотело обновить MySQL до версии 5.5, и он обновиться не смог, потому что ему мешали какие-то остатки от MySQL 5.1, которые пришлось выгребать чуть ли не руками. Но в итоге я получил у себя PHP 5.4.
# aptitude upgrade php5
Дальше я сочинил вот такую конструкцию:
find * | grep '.php$' | xargs -n 1 php -lЧто она делает:
1) "find *" находит все файлы в текущей папке и вложенных подпапках, и через вертикальную палку передаёт свой stdout дальше. Правильно это называется "конвейер".
2) "grep '.php$'" берёт входной поток и сравнивает всё, что в него валится, со строкой ".php", причём надо обязательно, чтоб строка на ".php" заканчивалась. Знак доллара там как раз означает конец строки; если б мне надо было, чтоб греп искал знак доллара, я бы написал "\$". И снова по конвейеру это валится дальше.
3) самая важная часть конструкции состоит из двух половин. "xargs -n 1" нарезает входящий поток порциями по одной строке и скармливает в качестве аргумента следующей команде. "php -l" в качестве аргумента принимает строки из xargs (то есть запускается каждый раз отдельно для каждой строки) и проверяет синтаксис.
Таким образом, одной командой можно проверить синтаксис всех php-скриптов в данной папке, даже не открывая браузер. Единственный минус, который я пока не придумал, как обойти, так это то, что вся конструкция прекращает работу, когда php в первый раз спотыкается. То есть можно получить не весь список найденных ошибок, а только первую попавшуюся. Но, тем не менее, консоль - сила, винда - могила! Кстати говоря, результат исследования неутешителен: не все части 1C-Bitrix поддерживают PHP 5.4. Ну то есть уже установленный битрикс завёлся у меня нормально, но можно ли будет его установить с нуля и будет ли он вообще нормально работать - этого никто гарантировать не может.
По крайней мере твою командную конструкцию можно было упростить так:
ОтветитьУдалитьfind . -type f -name "*.php" -exec php -l "{}" \;
или
for i in *.php; do php -l $i; done
Я бы делал вторым способом.
Можешь объяснить значение вот этого:
Удалить"{}" \;
?
-exec command
УдалитьTrue if the executed command returns a zero value as exit status. The end of command must be punctuated by an escaped semicolon (;). A command argument {} is replaced by the current pathname. If the last argument to -exec is {} and you specify + rather than the semicolon (;), the command is invoked fewer times, with {} replaced by groups of pathnames. If any invocation of the command returns a non-zero value as exit status, find returns a non-zero exit status.
Спасибо!
Удалить