Jeśli uruchomisz watch
polecenie zawierające alias, nie rozwinie ono aliasu. Próbowałem zarówno z pojedynczym cytatem, jak i podwójnym cytatem, w rzeczywistości biorąc pod uwagę następujący alias:
# alias ll
alias ll='ls -l --color=tty'
Następujące polecenie zakończy się niepowodzeniem
# watch ll
sh: ll: command not found
Czy w tym przypadku rozszerzenie wiersza poleceń nie powinno działać?
watch
ponieważ alias musi być następnym słowem, podczas gdywatch
do uruchomienia polecenia potrzebne są argumenty. Jeśli spróbujeszwatch -n 10 <alias>
, bash nie rozwinie aliasu. Aby obejść ten problem, potrzebujesz aliasu zawierającego żądane opcje (np. `Alias watch-10 = 'watch -n 10'), wciąż ze spacją końcową.Może moglibyśmy ręcznie rozwinąć alias, zanim obejrzy go zegarek?
Wyjaśnienie
Wyjście
alias ll
wygląda następująco:Ustawiamy więc ogranicznik cięcia jako pojedynczy cudzysłów i przecinamy drugie pole, pozostawiając:
tzn. rozszerzony alias. To następnie tworzy argumenty podane
watch
.Zrób funkcję, aby to zrobić
Następnie,
działa zgodnie z życzeniem. To jest okropne i zawiedzie we wszystkich sytuacjach. Przepraszam.
źródło
Myślałem, że tutaj podstawowym problemem jest podczas wykonywania
watch
, argumentem jest „sh -c
”, co oznacza, że jeśli aliasll
nie jest zdefiniowany wsh(dash shell's)
środowisku, to go nie rozwinie. Ale myliłem się i tak nie jest, powyższa odpowiedź Chrisa jest słuszna.źródło
watch 'alias ll="ls -l --color=tty"; type ll; ll'
.sh -c
”, twoje wyjaśnienie ma również zastosowaniesh
. Czy mam rację?sh
. Zauważ, że to robi pracę:sh -c $'alias ll="ls -l --color=tty"\ntype ll\nll'
Uruchom
watch
nową interaktywną powłokę, która rozszerzy alias:(Ma
-x
on na celu powstrzymanie sięwatch
od używania własnegosh -c
do zawijania naszego podanego polecenia. Nie chcemy tego, ponieważ musimy przekazać-i
dosh
lubbash
, aby uczynić ją interaktywną powłoką, która odczytuje .bashrc i definiuje aliasy. Za pomocą-x
, watch wykonuje polecenie za pomocą exec.)W rzeczywistości to nie działa. Po jednorazowym wyświetleniu wyniku „ll”, a następnie przespaniu 2 sekund, zadanie zostaje w tle, z nieco enigmatycznym:
Dlaczego to się skończyło? Gdzie
[
poszła otwarta orteza ? Cholera, myślałem, że to świetna odpowiedź, ale nie mogę sprawić, żeby zadziałała.źródło