повторить команду псевдоним перед запуском

У меня есть несколько псевдонимов, которые я хочу уточнить. Они работают. Как я могу сделать эту опцию для многих других псевдонимов. 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
3
задан 30 April 2019 в 19:05

2 ответа

Пример ~/.bash_aliases файла:

alias hi=" echo Hello"

Вы можете изменить это содержимое следующим образом, чтобы решить вашу проблему:

alias hi=" type hi; echo Hello"

Вывод в случае 1:

< blockquote>

$ hi

Hello

Вывод для случая 2:

$ hi

hi is с псевдонимом `тип привет; echo Hello '

Hello

Надеюсь, это решило вашу проблему

0
ответ дан 30 April 2019 в 19:05

Как насчет этого:

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  
0
ответ дан 30 April 2019 в 19:05

Другие вопросы по тегам:

Похожие вопросы: