Я хочу написать команду псевдонима для '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 и снова вошел в систему, и теперь эта новая команда работает. Спасибо всем!