Używam Bash jako interaktywnej powłoki i zastanawiałem się, czy istnieje prosty sposób, aby Bash uruchomił polecenie systemowe zamiast wbudowanego polecenia powłoki w przypadku, gdy oba mają tę samą nazwę.
Na przykład użyj system kill(od util-linux), aby wydrukować identyfikator procesu (pid) nazwanego procesu (procesów) zamiast wysyłać sygnał:
$ /bin/kill -p httpd
2617
...
Bez określenia pełnej ścieżki polecenia systemowego zamiast polecenia systemowego jest używane wbudowane Bash. killWbudowane nie ma -popcji więc polecenie kończy się niepowodzeniem:
$ kill -p httpd
bash: kill: p: invalid signal specification
Próbowałem odpowiedzi wymienionych w Make bash, używając zewnętrznego polecenia `time` zamiast wbudowanej powłoki, ale większość z nich działa tylko dlatego, że w timerzeczywistości jest słowem kluczowym powłoki, a nie wbudowaną powłoką .
Poza tymczasowym wyłączeniem wbudowanego Bash enable -n kill, najlepszym rozwiązaniem, jakie do tej pory widziałem, jest użycie:
$(which kill) -p httpd
Czy istnieją inne łatwiejsze (wymagające mniej pisania) sposoby wykonywania poleceń zewnętrznych zamiast wbudowanej powłoki?
Zauważ, że killto tylko przykład i chciałbym uogólnionego rozwiązania podobnego do sposobu, w jaki prefiks commandwbudowanego zapobiega uruchamianiu funkcji o takiej samej nazwie jak polecenie zewnętrzne. W większości przypadków zazwyczaj wolę używać wbudowanej wersji, ponieważ oszczędza to rozwidlania nowego procesu, a czasami wbudowane funkcje nie są dostępne w poleceniu zewnętrznym.
$(…)- patrz to , to i to .
which killw backticks (nie można ich umieścić w komentarzach) jest nieco krótsze.