Mam na przykład funkcję bash (lub alias) function install() {sudo apt-get install $@}
. Podczas uruchamiania polecenia install dicelab
, to, czego się spodziewałem, zostanie uruchomione sudo apt-get install dicelab
. Gdzie mogę zobaczyć, co faktycznie uruchomiła powłoka? Chciałbym się upewnić, że moje bardziej skomplikowane aliasy działają zgodnie z oczekiwaniami.
20
$@
część twojego aliasu? Pamiętaj, że aliasy tak naprawdę nie obsługują argumentów, które rozwiną się do parametrów pozycyjnych (jeśli istnieją) kontekstu wywołującego alias. Zwykły sposób działaniasomealias some args
polega po prostu na rozszerzeniu aliasu i pozostawieniu argumentów do naśladowania. Jeśli naprawdę chcesz mieć dostęp do argumentów, użyj funkcji i"$@"
"$@"
, argumenty z białymi lub globalnymi znakami spłoną inaczej.Odpowiedzi:
Użyj
set -x
w powłoce.Korzystanie
set -x
włączyxtrace
opcji powłoki (set +x
wyłącza go) i powinien działać we wszystkich Bourne'a jak muszle, jakbash
,dash
ksh93
,pdksh
izsh
. Powoduje to wyświetlenie przez powłokę polecenia, które zostanie wykonane po wykonaniu rozszerzeń aliasów i rozszerzeń zmiennych itp.Dane wyjściowe będą znajdować się w standardowym strumieniu błędów powłoki (tak jak zwykły monit), więc nie będzie zakłócać przekierowań standardowego wyjścia i będzie poprzedzone pytaniem zdefiniowanym przez
PS4
zmienną powłoki (+␣
domyślnie).Przykład z kilkoma funkcjami:
set -x
Domyślnie używam wszystkich interaktywnych powłok. Miło jest zobaczyć, co faktycznie zostało wykonane ... ale zauważyłem, że programowalne uzupełnianie tabulatorów itp. Może powodować niepożądane wyniki śledzenia w niektórych powłokach.źródło
Możesz użyć
shell-expand-line
, co jest związane Control - Alt- edomyślnie:Między innymi zastąpi aliasy w bieżącym wierszu ich definicją, abyś mógł zobaczyć polecenie, które nadal będziesz wykonywać. Przykład:
źródło
shell-expand-line
?zsh
. Ale niektórzy wpadli na swoje własne pomysły: wiki.math.cmu.edu/iki/wiki/tips/20140625-zsh-expand-alias.htmlMożesz użyć wbudowanego basha
type
, aby zobaczyć alias lub definicję funkcji, którą zamierzasz uruchomić:źródło