Jest to ciekawy sposób, ale nie do końca rozwiązuje problem. Co prawda skraca polecenie o jeden znak, ale nadal trzeba pamiętać o odpowiednim zapisie np. takim:
Teraz bash nie rozwinie znaku '*', ale rozwiązanie to ma swoje wady. Po pierwsze trzeba mieć stworzony wcześniej katalog "~/.pusty_katalog" (ewentualnie dopisać sobie jego stworzenie do aliasu), a po drugie, co ważniejsze, po wykonaniu polecania znajdziemy się w nowym katalogu. Przydałoby się dodać:
Nie mogę dojść co miałeś na myśli pisząc $*. Miałeś na myśli $1? Jeśli tak to spróbuj wykonać ten alias kilka razy z różnymi argumentami np. *.txt, a następnie *.jpg. Może ja coś źle robię, ale chyba nie do końca to dobrze działa.
Faktycznie, miało być $1. Jakaś wersja testowa się wkradła Co do niedziałania, to też faktycznie. Testowałem na jednym przykładzie i pewnie przez to uznałem, że działa.
$ grep "alias mf" .bashrc
alias mf='set -f; find ~ -name $1; set +f'
$ mf *.jpg
find: brak argumentu dla `-name'
$ mf *.txt
/home/piter/screenshot-2010-02-13-193418.jpg
Czyli z tego by wynikało, że najpierw jest rozwijany alias, następnie "wciskany enter", a dopiero po tym wczytywany argument $1.
Kombinowałem jeszcze w ten sposób:
#definicja funkcji pomocniczej
noglob_helper() {
"$@"
case "$shopts" in
*noglob*) ;;
*) set +f ;;
esac
unset shopts
}
#takiż alias
alias noglob='shopts="$SHELLOPTS"; set -f; noglob_helper'
#nasz alias "bez globowania"
alias find='shopts="$SHELLOPTS"; set -f; noglob_helper find ~ -name'