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) {
signature.asc
Description: This is a digitally signed message part.
