Resolve aliases aninhados em seus comandos de origem

4

Eu fiz vários aliases para minha conveniência.Mas agora eu preciso ser útil, enviando um comando útil e é cheio de aliases.Eu tentei fazer type u , mas tudo o que retorna é

up && ap upgrade -y --show-progress && r && ap check && ap autoclean

Estes são todos os aliases em u :

alias a='alias'
a ap='apt-get'
a r='ap autoremove -y'
a up='ap update'
    
por user251046 26.07.2014 / 12:32

2 respostas

12

Pressione Ctrl-Alt-e com um comando usando seus aliases escritos (prontos para serem executados) e O Bash expandirá . Ctrl-Alt-e é a ligação padrão para o comando shell-expand-line readline.

Cada vez que você pressiona Ctrl-Alt-e Bash irá expandir uma camada de alias, então pressione-a repetidamente até que seu comando seja expandido o quanto você precisar.

Se a sua chave Meta não for Alt , substitua-a ou pressione Escape Ctrl-e .

Existe também uma função alias-expand-line que não é vinculado por padrão, que expande apenas aliases.

    
por 26.07.2014 / 12:45
0

Eu postei uma pergunta semelhante em StackOverflow (provavelmente deveria ter postado aqui no Unix e Linux).

Minha solução foi escrever uma função bash:

xtrace() {
    local eval_cmd
    printf -v eval_cmd '%q' "${@}"
    { set -x
      eval "${eval_cmd}"
    } 2>&1 | grep '^++'
    return "${PIPESTATUS[0]}"
}

Então xtrace u imprimirá algo como:

++ apt-get update
++ apt-get upgrade -y --show-progress
++ apt-get autoremove -y
++ apt-get check
++ apt-get autoclean

Tenha em mente que isso realmente executa qualquer alias que você passar para ele, então se você não quiser executar u , então a solução da @ MichaelHomer é o melhor caminho a percorrer. Além disso, devido à sua corrente && , se qualquer um dos comandos em seu alias não retornar 0, a execução será interrompida e você verá apenas os alias expandidos até esse ponto.

    
por 02.05.2018 / 21:21

Tags