Package: devscripts
Version: 2.10.18.1
Severity: wishlist
User: [EMAIL PROTECTED]
Usertags: checkbashisms
Tag: patch

Attached is a simple hack that adds an option (which might probably be renamed 
to something more meaningful) that makes checkbashisms also display variable 
assignations.

Example:

$ cat test
#!/bin/sh

RANDOM=foo
echo $RANDOM
$ checkbashisms test
possible bashism in test line 4 ($RANDOM):
echo $RANDOM
$ ./checkbashisms.pl -x test
possible bashism in test line 3 ($RANDOM):
RANDOM=foo
possible bashism in test line 4 ($RANDOM):
echo $RANDOM

This feature will be very helpful (specially when performing the archive wide 
check) to detect scripts which fall back to something else when the expected 
bash behaviour isn't detected.

Sincerely,
-- 
Atomo64 - Raphael

Please avoid sending me Word, PowerPoint or Excel attachments.
See http://www.gnu.org/philosophy/no-word-attachments.html

Earth Hour 2008 - Take action!
http://www.earthhour.org/user/xJKk
--- checkbashisms.pl.orig	2008-03-12 16:49:08.000000000 -0600
+++ checkbashisms.pl	2008-03-14 20:11:43.000000000 -0600
@@ -29,7 +29,7 @@
 (my $progname = $0) =~ s|.*/||;
 
 my $usage = <<"EOF";
-Usage: $progname [-n] [-f] script ...
+Usage: $progname [-n] [-f] [-x] script ...
    or: $progname --help
    or: $progname --version
 This script performs basic checks for the presence of bashisms
@@ -48,6 +48,7 @@
 
 my ($opt_echo, $opt_force);
 my ($opt_help, $opt_version);
+my ($opt_extended);
 
 ##
 ## handle command-line options
@@ -56,6 +57,7 @@
 	   "version|v" => \$opt_version,
 	   "newline|n" => \$opt_echo,
 	   "force|f" => \$opt_force,
+	   "extended|x" => \$opt_extended,
            )
     or die "Usage: $progname [options] filelist\nRun $progname --help for more details\n";
 
@@ -63,6 +65,7 @@
 if ($opt_version) { print $version; exit 0; }
 
 my $status = 0;
+my $dollar_sign = $opt_extended? '\$?' : '\$';
 
 foreach my $filename (@ARGV) {
     if (!$opt_force and script_is_evil_and_wrong($filename)) {
@@ -168,13 +171,13 @@
 		'\$\{\w+(/.+?){1,2}\}' =>      q<${parm/?/pat[/str]}>,
 		'[EMAIL PROTECTED]' => q<bash arrays, ${name[0|*|@]}>,
 		'(\$\(|\`)\s*\<\s*\S+\s*(\)|\`)' => q<'$(\< foo)' should be '$(cat foo)'>,
-		'\$\{?RANDOM\}?\b' =>          q<$RANDOM>,
-		'\$\{?(OS|MACH)TYPE\}?\b'   => q<$(OS|MACH)TYPE>,
-		'\$\{?HOST(TYPE|NAME)\}?\b' => q<$HOST(TYPE|NAME)>,
-		'\$\{?DIRSTACK\}?\b'        => q<$DIRSTACK>,
-		'\$\{?EUID\}?\b'	    => q<$EUID should be "id -u">,
-		'\$\{?SECONDS\}?\b'	    => q<$SECONDS>,
-		'\$\{?BASH(_[A-Z]+)?\}?\b'   => q<$BASH(_SOMETHING)>,
+		$dollar_sign . '\{?RANDOM\}?\b' =>          q<$RANDOM>,
+		$dollar_sign . '\{?(OS|MACH)TYPE\}?\b'   => q<$(OS|MACH)TYPE>,
+		$dollar_sign . '\{?HOST(TYPE|NAME)\}?\b' => q<$HOST(TYPE|NAME)>,
+		$dollar_sign . '\{?DIRSTACK\}?\b'        => q<$DIRSTACK>,
+		$dollar_sign . '\{?EUID\}?\b'	    => q<$EUID should be "id -u">,
+		$dollar_sign . '\{?SECONDS\}?\b'	    => q<$SECONDS>,
+		$dollar_sign . '\{?BASH(_[A-Z]+)?\}?\b'   => q<$BASH(_SOMETHING)>,
 	    );
 
 	    if ($opt_echo) {

Attachment: signature.asc
Description: This is a digitally signed message part.

Reply via email to