1#!/usr/bin/perl 2 3# Test t0000..t9999.sh for non portable shell scripts 4# This script can be called with one or more filenames as parameters 5 6use strict; 7use warnings; 8 9my$exit_code=0; 10 11sub err { 12my$msg=shift; 13print"$ARGV:$.: error:$msg:$_\n"; 14$exit_code=1; 15} 16 17while(<>) { 18chomp; 19/\bsed\s+-i/and err 'sed -i is not portable'; 20/\becho\s+-[neE]/and err 'echo with option is not portable (please use printf)'; 21/^\s*declare\s+/and err 'arrays/declare not portable'; 22/^\s*[^#]\s*which\s/and err 'which is not portable (please use type)'; 23/\btest\s+[^=]*==/and err '"test a == b" is not portable (please use =)'; 24/\bwc -l.*"\s*=/and err '`"$(wc -l)"` is not portable (please use test_line_count)'; 25/\bexport\s+[A-Za-z0-9_]*=/and err '"export FOO=bar" is not portable (please use FOO=bar && export FOO)'; 26# this resets our $. for each file 27close ARGV ifeof; 28} 29exit$exit_code;