Tworzenie aliasu dla `tree -P '* name *' '

0

Tworzę aliasdla następującego polecenia za pomocą treeprogramu:

tree -P '*name*'

To działa dokładnie tak, jak chcę. Ale kiedy tworzę alias dla tego polecenia, polecenie zachowuje się inaczej: drukuje tylko katalogi, a nie pliki.

W .bash_aliases

function tree_seek {
tree -P '*$1*' 
}

alias treeseek='tree_seek'

Dlaczego alias treeseek namenie działa tak samo jak tree -P '*name*'.

Bentley4
źródło
2
@artistoex Czy mógłbyś to rozwinąć? Z tego, co mogę powiedzieć, nie różni się to od skasowanej odpowiedzi, którą skomentowałeś, ponieważ cudzysłowy oznaczone gwiazdkami nie podlegają rozszerzeniu, więc również tree -P "*$1*"powinny działać.
Daniel Beck
Rzeczywiście, używając podwójnych cudzysłowów, takich jak Daniel Beckwspomniane prace. Czy możesz to opublikować jako osobną odpowiedź?
Bentley4
Aliasy nie obsługują argumentów, użyj funkcji powłoki.
vonbrand

Odpowiedzi:

2

W Bash pojedyncze cudzysłowy niczego nie interpolują . Zamiast tego spróbuj użyć podwójnego cudzysłowu:

function tree_seek() {
  tree -P "*$1*" 
}

alias treeseek='tree_seek'
Eero Helenius
źródło
@ daniel-beck: Przepraszam, z pewnością nie chciałem przejąć twojej odpowiedzi. Nie widziałem twojego komentarza przed opublikowaniem mojej odpowiedzi.
Eero Helenius
+1 za odkrycie i przeprosiny dla Daniela Becka.
jaume