views:

55

answers:

2

I have a bunch of scripts in directory that exists on the path, so I can access each wherever I am. Sometime those are very simple util scripts that "vims" the file. From time to time I would like to quickly see the content of script file and see path to file the script opens (then make cat, grep ...).

I would like to make an alias which will "cat" given script wherever I am.
Given one is not working:
alias a="cat `which \$1`"
If I place script name instead of parameter number($1) it works fine. But with parameter not.

The second question (I wish life be so so beautiful!) would be getting auto-completion of script name for that alias.
Using a script that could exist in my "bin" directory would another approach which I can take.

+1  A: 

For the alias with argument, use function instead of aliases :

a() { cat `which $1` ;}

Or if you do it on more than one line, skip th semicolon :

a() {
    cat `which $1`
}

You can enter it interactively at the shell prompt :

shell:>a() {
>cat `which $1`
>}
shell:>
shodanex
+1 I have such solution. Be my Hero and tell me about auto completion for that function. So I do not have to input command every time by hand. Now I have auto completion when I invoke the commands that are in the path.
Gadolin
+1  A: 

If your function is called "foo" then your completion function could look like this:

If you have the Bash completion package installed:

_foo () { local cur; cur=$(_get_cword); COMPREPLY=( $( compgen -c -- $cur ) ); return 0; }

If you don't:

_foo () { local cur; cur=${COMP_WORDS[$COMP_CWORD]}; COMPREPLY=( $( compgen -c -- $cur ) ); return 0; }

Then to enable it:

complete -F _foo foo

The command compgen -c will cause the completions to include all commands on your system.

Your function "foo" could look like this:

foo () { cat $(type -P "$@"; }

which would cat one or more files whose names are passed as arguments.

Dennis Williamson
:-) Thanks a lot for the post. I did not accept answer before hoping to find a while to test it. What I am looking foward.
Gadolin