Kontakt
Telefon +49 2161 17 58 83
Mobil +49 179 72 66 112
E-Mail info@ulrich-borchers.de

Rekursiver Lint-Check mit xargs

Vor einem größeren Commit kann es praktisch sein, den gesamten Quellcode oder auch nur den Code in einem einzelnen Verrzeichnisses inklusive aller Unterverzeichnisse auf Syntaxfehler zu prüfen. Dazu ist kein umständliches Skript notwendig, und als Programmierer braucht man sich auch nicht auf einen etwaigen Commit-Hook des Versionskontrollsystems, der einen Lint-Check ausführt, zu verlassen, falls ein solcher überhaupt vorhanden ist.

Stattdessen ist ein Einzeiler ausreichend:

find ./ -name '*.php' | xargs -I% /usr/local/bin/php -l %


'find' ermittelt rekursiv alle Dateien mit der Endung .php. Die Dateinamen werden xargs in die Standardeingabe geschrieben, welches für jede Zeile (einzelner Dateiname mit Pfad) einen Lint-Check durchführt (/usr/local/bin/php -l). Das Prozentzeichen dabei wird von xargs durch den jeweils verarbeiteten Dateinamen ersetzt.

Wer möchte, kann auch gerne das Skript 'rlint.sh' verwenden. Es führt diesen Befehl aus und ermöglicht dabei die optionale Angabe eines Verzeichnisses. Dadurch wird diese etwas kryptische Kommandozeile deutlich handlicher.

Das beruhigende Ergebnis:

borchers@debian:~/projects/> rlint.sh class-descriptor/

No syntax errors detected in classes/ClassDescriptor/Provider/Mock.php
No syntax errors detected in classes/ClassDescriptor/Provider/Interface.php
No syntax errors detected in classes/ClassDescriptor/SOAPClient.php
No syntax errors detected in classes/ClassDescriptor/Client.php
No syntax errors detected in classes/ClassDescriptor/Frontend.php
No syntax errors detected in classes/ClassDescriptor/Server.php
No syntax errors detected in classes/ClassDescriptor.php

rlint.sh

#!/bin/sh
# $Id: rlint.sh 83 2010-06-02 18:51:38Z ub $
# --------------------------------------------------
# Recursive lint checker: Checks all PHP files for
# parse errors (.php only).
#
# 02 Jun 2010 Ulrich Borchers
#             Software-Entwickwicklung und Beratung
# --------------------------------------------------
USAGE="USAGE:  bash> rlint [dir]"

# uncomment this line to ensure that exactly this PHP
# binary is used for lint check:
# BIN_PHP="/usr/local/bin/php"

if [ -z $BIN_PHP ]; then
  BIN_PHP=`which php`
fi

if [ ! -x $BIN_PHP ]; then
  echo 
  echo "ERR: PHP binary not available or executable"
  echo 
  echo $USAGE
  echo
  exit 1
fi

# current working directory, fallback
DIR="."

if [ ! -z $2 ]; then
  echo 
  echo "ERR: too many arguments"
  echo 
  echo $USAGE
  echo 
  exit 1
fi

# directory given?
if [ ! -z $1 ]; then
  if [ ! -d $1 ]; then
    echo 
    echo "ERR: directory not found"
    echo 
    echo $USAGE
    echo 
    exit 1
  fi
  DIR=$1
fi

find $DIR -name '*.php' | xargs -I% $BIN_PHP -l %

echo 
echo $USAGE
echo 

Zurück

Hands On PHP

Harter Hut

Programmiertes - Jenseits von Prosa.

Zend Certified Engineer
Zend Certified Engineer ZF
Oracle Certified Professional, MySQL 5.6 Developer
Sun Certified Java Programmer (SCJP)
Sun Certified Web Component Developer (SCWCD)
RSS
tl_files/open_clip_art/symbole/rss-icon.png  Abonnieren