Reputation: 1404
I use a modifies list command as alias (in KSH):
alias ltf='ls -lrt -d -1 $PWD/*'
So the command ltf
displays something like this:
-rw-r--r-- 1 myuser mygroup 0 Apr 18 12:00 /usr/test.txt
-rw-r--r-- 1 myuser mygroup 0 Apr 18 12:00 /usr/test.log
Now I want to use wildcards. But using ltf *.log
does not work.
What is the best way to achieve that?
Update: I want to specify my question because the answers does not solve my problem so far: the command ls -lrt -d -1 $PWD/*
executes a list command with some options AND it displays the full path, which is an important point for me.
Unfortunately the alias approach does not allow wildcard parameters. My goal is to make this possible. Probably it is the best way to create the command as a function. This is mentioned in the answers, but it does not work yet (see comments).
Any ideas?
Upvotes: 5
Views: 6465
Reputation: 1604
As mentioned by others, wildcard expansion is done before calling shell functions, but not so with an alias.
If you don't need to change the input (which the OP does), this would work fine:
alias ltf='ls -lrt -d -1'
To achieve what the OP wants, within a shell function you would need to use the $@
operator to access the set of files resulting from the wildcard expansion, which you would then need to prepend:
ltf()
{
#Prepend $PWD to the start of every input
set -- "${@/#/$PWD/}"
#Run the command on the prepended input
ls -lrt -d -1 $@;
}
Upvotes: 0
Reputation:
Your problem is that the wildcards are getting expanded by the shell in your current directory, not in $PWD. You can solve this by using a shell function rather than an alias and doing some quoting (I use $HOME in the example for my convenience) - put this in .bashrc:
ltf() {
ls $HOME/$*
}
and then:
$ ltf '*.log'
Upvotes: 3
Reputation: 25599
try
alias ltf='ls -lrt -d -1 $1'
or if you want many params
alias ltf='ls -lrt -d -1 $@'
Upvotes: 2
Reputation: 363597
Use a shell function instead of an alias:
function ltf {
if [ -z "$1" ]; then
ls -lrtd1 ${PWD}/*
else
ls -lrtd1 $1
fi
}
Upvotes: 5