diff options
Diffstat (limited to 're!')
-rwxr-xr-x | re! | 48 |
1 files changed, 0 insertions, 48 deletions
@@ -1,48 +0,0 @@ -#!/usr/bin/env perl - -# re! -- rewrite shebangs - -use strict; - -my $test = 0; -sub usage { die "usage: $0 [-n] file ...\n" } - -if (@ARGV and $ARGV[0] eq '-n') { - $test = 1; - shift @ARGV; -} -usage if not @ARGV; - -for my $file (@ARGV) { - open my $o, '<', $file or die "could not open $file: $!\n"; - - # parse shebang - my $shebang = <$o>; - $shebang =~ /^#!/ or die "no shebang: $file\n"; - $shebang =~ /^#!\s*(\S+)\s*(.*)/; - my ($old, $args) = ($1, $2); - - # validate path - next if -x $old; - - # get new path - (my $basename = $old) =~ s,.*/,,; - chomp(my $new = `which $basename`); - $new or die "could not find $basename\n"; - next if $old eq $new; - - # print results if test - if ($test) { - print "$file: $old -> $new\n"; - next; - } - - # write new shebang - open my $n, '>', "$file.tmp" or die "could not open $file.tmp: $!\n"; - print $n "#!$new $args\n"; - print $n $_ while <$o>; - - close for ($o, $n); - system('mv', "$file.tmp", $file) == 0 - or die "could not overwrite $file\n"; -} |