Alias help

As part of my daily duties and to help me learn more about UNIX, I have to check a report to make sure all requested mksysb's completed each day. If the report doesn't show 100% completed, I have to use our NIM server and find the file. I use the command

ls -l /

<filename>. I am trying to use an alias to handle the code up to the /. I have tried the following unsuccessfully:

alias llf='ls -l /'

,

alias llf='ls -l "/"$1'

, and

alias llf='/usr/bin/ls -l /'

.

Any suggestions on what I'm doing wrong would be appreciated. I would prefer tips & suggestions over an outright answer, as I would learn more that way. Thanks

Welcome to the forum and let me first ask a favour: please always state your environment (OS, shell, relevant programs and their versions...) first. From your description i take it you are on ksh in an AIX environment, but that is perhaps not obvious for everybody here.

This is a commendable attitude and i hope to be able to comply: an alias is a simple text replacement. So, when you define "llf" the way you did it and you write:

llf dir

what comes out after text replacement? And why doesn't it work?

Bonus question: what could be done to make it work, in light of finding why it doesn't in this way?

I hope this helps.

bakunin

Hi Kentlee65...

Welcome friend...
We need your shell type, machine, and said machine OS.

OK.
When you run your aliases what are the results and/or error reports.
Copy and paste them from your terminal inside '</>' code tags. If nothing happens to any of them then just say nothing or blank.

This is a starter to help you diagnose errors and syntax as well as possible programming errors...
TIA.

Bazza.

See above, it is ksh and AIX: "mksysb" is - roughly - the AIX equivalent of a kickstart image and "NIM" is the equivalent of an installation repository (think "Satellite Server"). The machine can't be anything else then an (LPAR in a) IBM p-Series in this case.

bakunin

1 Like

Bakunin, you are correct about the shell. I have found a way to make it work by defining the alias as such:

alias llf='ls -l '

. I was hoping to have the alias provide that leading / for the filename, as its easier to copy from the report without it.

As for the question, when the text replacement is done, the system gets $ /usr/bin/ls -l / <copied filename>. I cannot figure out how to get it to not put that space in there.

Very good, spot on! This is the reason why an alias won't work for that.

This is possible, but not with an alias. Notice that one of your initial solutions:

alias llf='ls -l "/"$1'

did not work because "${1}" or "$1" are denominating positional parameters. Positional parameters occur only in processes. To create a new process you would need a script therefore. So, what you can do is to create a file called "llf" with this content:

ls -l /"${1}"

set its execute rights (i.e. chmod 754 llf ) and now you could use it like:

/path/to/llf usr

to execute ls -l /usr . Put this script (if you are satisfied) into your PATH (or extend your PATH variable to where the script resides) and you could use that like the alias you initially planned to use.

I hope this helps.

bakunin

... or in functions. Try

llf() { ls -l /$1; }
llf root

Bakunin, thank you so much for the lesson. I was able to make the command (file) llf and it works JUST PERFECT

$ llf data/images/monthly_mksysb/VIO_99D80_1/VIO_99D80_1_201904012116
-rw-r--r--    1 root     system   3409305600 Apr 01 21:21 /data/images/monthly_mksysb/VIO_99D80_1/VIO_99D80_1_201904012116
$ llf data/images/monthly_mksysb/VIO_99D80_2/VIO_99D80_2_201904012122
-rw-r--r--    1 root     system   3388416000 Apr 01 21:27 /data/images/monthly_mksysb/VIO_99D80_2/VIO_99D80_2_201904012122

.

Thanks again to all for the input.