Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

Is there a packaged program that shows command line arguments? I often find it helpful to have users run this type of program to either help them understand what their shell commands do, or to get clearer, less ambiguous feedback (e.g. when I can't see their screen and we're communicating online with paste sites).

I've written the below script in Python, which works, but I'd find it easier to tell people a Ubuntu package they can grab rather than explain how write to a file, chmod +x, and change their system (e.g. maybe they don't have ~/bin setup in PATH, ...).

I'd be happy to see a command-line sed/awk/perl/etc. script to do this functionality as well, even if it's ugly. ("If"... doing this in one-line will be ugly.)

Any solution needs to have somewhat similar results to this script; which are, in English: print each argument with a number (escaping problematic characters is just a bonus).

#!/usr/bin/env python2.6
import sys

if len(sys.argv) == 1:
  print "No args!"
else:
  args = enumerate(sys.argv)
  args.next()  # skip program name
  for i, v in args:
    r = repr(v)
    if v.strip() != v or v != r[1:-1]:
      v = r + "\t(repr)"
    print "%3d: %s" % (i, v)
share|improve this question
    
How do you handle concatenated options or optional spaces and such? The way the commandline is parsed is different between applications, so I'm not sure you can have one utility making sense of all of them... –  JanC Oct 25 '10 at 19:47
    
@JanC: The goal isn't to parse the arguments into what they mean, but simply to show the shell's tokenization, which can be confusing when using $variables and $(other things). –  Roger Pate Oct 25 '10 at 19:51
    
@JanC: Try var=f\ ee; showargs $(echo "co f") $var, using either my showargs or enzotib's, for example. –  Roger Pate Oct 25 '10 at 19:59
1  
If you only try to illustrate the shell's tokenization after expanding it makes more sense of course. –  JanC Oct 25 '10 at 21:19
add comment

2 Answers

My solution (you already know ;) as a function (no need to deal with PATH) to become one-liner:

showargs() { i=1; for f; do printf "arg%d: <%s>\n" $i "$f"; ((i++)); done; }
share|improve this answer
    
Giving you something like this right from the start would've made explaining that other issue easier. Thanks for posting. Still would love to know if there's a package, as I think that would be easiest for explaining command-lines to non-programmer types. –  Roger Pate Oct 25 '10 at 10:03
1  
If there is no package yet, it might be useful to add it to one of the existing packages that contain all sorts of little tools (or create a new one to collect such scripts). –  JanC Oct 25 '10 at 21:18
add comment

This is particularly easy and useful in Bash. This guide at IBM walks through the use of $@, $#, $1, $2, etc. and has a nice testargs.sh script (see listings 7 and 8) that does something like you're looking for: it shows users what arguments and options they've entered.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.