Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

chomping the output of Shell.pm

by LanX (Canon)
on Sep 08, 2012 at 20:23 UTC ( #992526=perlquestion: print w/ replies, xml ) Need Help??
LanX has asked for the wisdom of the Perl Monks concerning the following question:

hi im using use Shell qw/commands/ in my perldebugger config to have some handy shell commands while interacting with the OS. Unfortunately the newlines are a bit disturbing,
DB<109> pwd => "/tmp\n"
any clever suggestions how to automatically chomp them? At the moment I'm doing it with a brute force wrapper like
my $old= \&pwd; my $new= sub { chomp( my @ret=$old->(@_) ); return @ret }; *pwd=$new;
DB<114> pwd => "/tmp"
Anything better? Should be as lightweight as possible...

Cheers Rolf

Comment on chomping the output of Shell.pm
Select or Download Code
Re: chomping the output of Shell.pm
by Anonymous Monk on Sep 08, 2012 at 21:35 UTC

    any clever suggestions how to automatically chomp them?

    Modify Shell.pm to accept  { autochomp => [qw[ commands ]] }

Re: chomping the output of Shell.pm
by kcott (Abbot) on Sep 09, 2012 at 05:11 UTC

    G'day Rolf,

    Update: I posted a solution but later found it didn't work with commands that output multiple lines (e.g. ls, ps, etc.). Here's a new solution that doesn't have that problem. The original also had a portability issue: this one doesn't. (The spoiler below contains the original solution.)

    My .perldb contains:

    $ cat ~/.perldb for (qw{pwd date ls ps}) { $DB::alias{$_} = 's{^($_.*)$}{chomp(my $out = qx{$1}); print {$DB::OUT} $out} +e'; }

    Obviously, substitute qw{pwd date ls ps} with your qw/commands/. See perldebug - Debugger Customization for a description of %DB::alias.

    Here's a test run:

    $ perl -d -e 1 Loading DB routines from perl5db.pl version 1.33 Editor support available. Enter h or `h h' for help, or `man perldebug' for more help. main::(-e:1): 1 DB<1> pwd /Users/ken/tmp DB<2> date Sun 9 Sep 2012 18:12:43 EST DB<3> date "%Y-%m-%d" date: illegal time format usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS +]] ... [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format] DB<4> date "+%Y-%m-%d" 2012-09-09 DB<5> ls -l total 30824 ... drwxr-xr-x 7 ken staff 238 14 Jun 20:23 zip_test DB<6> ps -ef UID PID PPID C STIME TTY TIME CMD ... 501 74528 74527 0 23Aug12 ttys007 0:00.04 -bash DB<7> q $

    The typo (date "%Y-%m-%d") was accidental but I left it in just to show that the mistake was handled in a reasonable fashion.

    -- Ken

      Hi Ken,

      thanks for your solution, but I wanna use those functions in any place not only at start of line.

      e.g.

      rm grep {/.pl$/} ls

      If you wanna implement (start of line) aliases, you should simply us "!!"

      DB<112> =du !!du DB<113> du /tmp 8 /tmp/pulse-lanx 4 /tmp/virtual-lanx.AqXwcf ... DB<114> $DB::alias{du} => "s\adu\a!!du\a"

      !! cmd Run cmd in a subprocess (reads from DB::IN, writes to DB:: +OUT) See 'O shellBang' too.

      Cheers Rolf

      ) Yes I could use the file-glob <*> instead, but this is only an example for chaining commands

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://992526]
Approved by Old_Gray_Bear
Front-paged by Corion
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (3)
As of 2014-10-25 05:58 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    For retirement, I am banking on:










    Results (142 votes), past polls