Я хочу написать команду псевдонима для 'ls', так что если я передам параметр, то псевдоним будет использовать его, а если нет, то вместо него будет использоваться '*'. Это псевдоним у меня сегодня:
alias lsd='ls --color -lh | grep "^d" && ls --color -lh | grep -v "^d"
Моя проблема в том, что независимо от того, что я печатаю для lsd
команды, я всегда получаю все файлы в ответе. Поэтому, когда я печатаю lsd *.sh
, я все равно получаю все каталоги и файлы в списке.
Я скопировал этот псевдоним из другого поста SuperUser, но пока не совсем понял.
Спасибо за любую помощь.
ОБНОВЛЕНИЕ : Хорошо, теперь у меня есть эта функция, определенная в моем файле .bashrc:
function lsd() {
if [[ -z $1 ]] ; then
command ls --color -lh | grep "^d" && ls --color -lh | grep -v "^d"
else
command ls --color -lh "$1" | grep "^d" && ls --color -lh "$1" | grep -v "^d"
fi
}
Когда я запускаю это просто lsd
, это работает так, как я хочу. Когда я запускаю его, lsd *.wav
хотя, я все равно получаю имена каталогов в выводе, а затем вижу «Двоичный файл x.wav соответствует выводу». Что я делаю неправильно?
В случае, если это не ясно, я пытаюсь перечислить каталоги и затем файлы, но только те, которые соответствуют первому параметру в команде. Поэтому, когда я вхожу lsd *.wav
, я не ожидаю увидеть каталоги, так как их имена не заканчиваются на .wav. Спасибо за помощь! :)
ПОСЛЕДНО: Не бери в голову Я использовал исходный код .bashrc, чтобы попытаться обновить bash, но это не сработало, поэтому старые команды все еще работали. Я закрыл сеанс SSH и снова вошел в систему, и теперь эта новая команда работает. Спасибо всем!
[[ -z $1 ]]
иначе, вы можете предоставить слишком много аргументов (попробуйте это:)[[ -z a b c ]]
;command ls
не используйте'ls'