Aliasowanie grep w opcji -exec find
Mam te aliasy w moim ~/.bashrc
alias grep='grep --color=auto -H'
alias fgrep='fgrep --color=auto -H'
alias egrep='egrep --color=auto -H'
ale nie mają one żadnego efektu, kiedy uruchamiam find ... -exec grep ...i zawsze muszę podawać te opcje ręcznie.
Czy istnieje sposób, aby powiedzieć, findaby polegać na aliasach w -execargumentach opcji? Myślę o plikach konfiguracyjnych, a nie o innych aliasach.
Czy byłoby to w jakiś sposób niebezpieczne?
Odpowiedzi
Nie możesz używać takich aliasów. Aliasy działają tylko wtedy, gdy są używane jako pierwsze w długiej sekwencji poleceń, powłoka zasadniczo zastępuje tekst aliasu faktycznym poleceniem. Kiedy wprowadzasz polecenie, powłoka najpierw szuka aliasu, następnie funkcji i tak dalej. Podstawianie poleceń / zastępowanie aliasów nie działa, jeśli używasz aliasu w środku sekwencji poleceń.
Co więcej, -execflaga find, zawsze utworzy oddzielny proces wykonujący plik binarny, a nie alias ani funkcję, która jest zakodowana na stałe.
Niektóre powłoki pozwalają na rozwinięcie aliasów w dowolnym miejscu w wierszu poleceń - na przykład zshmają koncepcję aliasu globalnego ,alias -g 'grep=grep --color=auto -H'
Jeśli jednak twoją powłoką interaktywną jest bash, aliasy są interpretowane tylko wtedy, gdy pojawiają się jako pierwsze słowo polecenia, więc musisz zawinąć grepwywołanie w powłokę i wywołać powłokę w sposób, który powoduje ~/.bashrcodczytanie pliku, jak w interaktywnej sesji powłoki.
Na przykład
find . -name '*.txt' -exec bash -ic 'for f do grep foo "$f"; done' find-bash {} +
ODPOWIEDŹ, nie jest to w żaden sposób niebezpieczne - jednak wiąże się to z pewnym narzutem i nie jest o wiele wygodniejsze niż po prostu dostarczanie żądanych opcji bezpośredniego grepa.