У меня есть несколько псевдонимов, которые я хочу уточнить. Они работают. Как я могу сделать эту опцию для многих других псевдонимов. Awk или grep? И указатели полезны. Благодаря.
# IP addresses
alias myip="echo '# myip curl https://ipecho.net/plain; echo #'; curl -sS https://ipecho.net/plain; echo"
alias hazip="echo '# hazip curl https://ipv4.icanhazip.com #'; curl -sS https://ipv4.icanhazip.com"
alias ips='myip && hazip'
~ ips
# myip curl https://ipecho.net/plain; echo #
1.2.3.4
# hazip curl https://ipv4.icanhazip.com #
1.2.3.4
Пример ~/.bash_aliases
файла:
alias hi=" echo Hello"
Вы можете изменить это содержимое следующим образом, чтобы решить вашу проблему:
alias hi=" type hi; echo Hello"
Вывод в случае 1:
< blockquote> $ hi
Hello
blockquote>Вывод для случая 2:
$ hi
hi is с псевдонимом `тип привет; echo Hello '
Hello
blockquote>Надеюсь, это решило вашу проблему
Как насчет этого:
shopt -s extdebug
shopt -u expand_aliases
function check_for_alias {
COMMAND=$(alias $BASH_COMMAND 2> /dev/null)
if [ $? -eq 0 ]
then
tput setaf 1
echo $COMMAND
tput sgr0
${BASH_ALIASES[$BASH_COMMAND]}
return 1
fi
}
trap check_for_alias DEBUG
Объяснение :
Я использую так называемую ловушку bash DEBUG для вызова функции перед любой командой. Внутри я могу использовать переменную $BASH_COMMAND
для просмотра того, что в данный момент вызывается:
function check_for_alias {
echo $BASH_COMMAND
}
trap check_for_alias DEBUG
Это не подойдет для псевдонимов, потому что в обработчике они уже раскрыты - я должен отключить их расширение, а затем вызовите их вручную:
shopt -u expand_aliases
function check_for_alias {
# ...
${BASH_ALIASES[$BASH_COMMAND]}
}
К сожалению, bash все еще пытается запустить нерасширенный псевдоним, поэтому я обнаружил ошибку, сообщающую, что команда не найдена. Чтобы обойти это, я включаю отладку и возвращаю 1 из обработчика, если обнаруживаю, что выполняемая команда является псевдонимом
shopt -s extdebug
function check_for_alias {
COMMAND=$(alias $BASH_COMMAND 2> /dev/null)
if [ $? -eq 0 ]
then
# ...
return 1
fi
}
Наконец, для печати псевдонима я использую tput
для использования красного шрифта. Выходная команда сохраняется в переменной $COMMAND
.
tput setaf 1
echo $COMMAND
tput sgr0