Используйте set -x
в оболочке.
$ alias hello='echo hello world!'
$ hello
hello world!
$ set -x
$ hello
+ echo hello world!
hello world!
Использование set -x
очереди на xtrace
опции оболочки ( set +x
выключает) и должны работать во всех Bourne-подобных оболочек, как bash
, dash
ksh93
, pdksh
и zsh
. Это заставляет оболочку отображать команду, которая выполняется после выполнения расширений псевдонимов, расширений переменных и т. Д.
Вывод будет происходить в стандартном потоке ошибок оболочки (так же, как в обычном приглашении), поэтому он не будет мешать перенаправлениям стандартного вывода, и ему будет предшествовать приглашение, определенное PS4
переменной оболочки ( +␣
по умолчанию).
Пример с несколькими функциями:
$ world () { echo "world"; }
$ hello () { echo "hello"; }
$ helloworld () { printf '%s %s!\n' "$(hello)" "$(world)"; }
$ helloworld
hello world!
$ set -x
$ helloworld
+ helloworld
++ hello
++ echo hello
++ world
++ echo world
+ printf '%s %s!\n' hello world
hello world!
Я использую set -x
все мои интерактивные оболочки по умолчанию. Приятно видеть, что на самом деле было выполнено ... но я заметил, что программируемое завершение табуляции и т. Д. Может привести к нежелательному выводу трассы в некоторых оболочках.
$@
часть вашего псевдонима? Помните, что псевдонимы на самом деле не поддерживают аргументы, которые распространяются на позиционные параметры (если они есть) контекста, вызывающего псевдоним. Обычный способ запускаsomealias some args
работает, просто расширяя псевдоним и оставляя аргументы для него. Если вы действительно хотите получить доступ к аргументам, используйте функцию и процитируйте"$@"