Например, у меня есть функция bash (или псевдоним) function install() {sudo apt-get install $@}
. При запуске команды install dicelab
, я ожидаю, что на самом деле будет выполняться sudo apt-get install dicelab
. Где я могу увидеть, что на самом деле было запущено оболочкой? Я хотел бы убедиться, что мои более сложные псевдонимы работают, как ожидалось.
20
$@
часть вашего псевдонима? Помните, что псевдонимы на самом деле не поддерживают аргументы, которые распространяются на позиционные параметры (если они есть) контекста, вызывающего псевдоним. Обычный способ запускаsomealias some args
работает, просто расширяя псевдоним и оставляя аргументы для него. Если вы действительно хотите получить доступ к аргументам, используйте функцию и процитируйте"$@"
"$@"
аргументы с пробелами или глобальными символами будут гореть в противном случае.Ответы:
Используйте
set -x
в оболочке.Использование
set -x
очереди наxtrace
опции оболочки (set +x
выключает) и должны работать во всех Bourne-подобных оболочек, какbash
,dash
ksh93
,pdksh
иzsh
. Это заставляет оболочку отображать команду, которая выполняется после выполнения расширений псевдонимов, расширений переменных и т. Д.Вывод будет происходить в стандартном потоке ошибок оболочки (так же, как в обычном приглашении), поэтому он не будет мешать перенаправлениям стандартного вывода, и ему будет предшествовать приглашение, определенное
PS4
переменной оболочки (+␣
по умолчанию).Пример с несколькими функциями:
Я использую
set -x
все мои интерактивные оболочки по умолчанию. Приятно видеть, что на самом деле было выполнено ... но я заметил, что программируемое завершение табуляции и т. Д. Может привести к нежелательному выводу трассы в некоторых оболочках.источник
Вы можете использовать
shell-expand-line
, что связано с Control- Alt- eпо умолчанию:Среди прочего, он заменит псевдонимы в текущей строке их определением, чтобы вы могли видеть команду, которую вы все еще собираетесь выполнить. Пример:
источник
shell-expand-line
?zsh
. Но некоторые люди придумали свои собственные идеи: wiki.math.cmu.edu/iki/wiki/tips/20140625-zsh-expand-alias.htmlВы можете использовать встроенную bash
type
, чтобы увидеть псевдоним или определение функции, которую вы собираетесь запустить:источник