Comando Wrap no prompt

7

É possível inserir um separador após o comando em um prompt? Este é um exemplo:

~/Desktop: ls -al
-------------------------------------
total 80
drwx------+  6 eddie  staff   204B Apr 29 16:57 .
drwxr-xr-x+ 54 eddie  staff   1.8K Apr 30 10:54 ..

~/Desktop:

Especificamente, quero adicionar a parte --------- depois de emitir um comando para facilitar a distinção entre o comando e o resultado

    
por Eddie Monge Jr 30.04.2013 / 19:56

2 respostas

9

Em zsh, você pode definir a função de gancho preexec para fazer o eco de uma string especificada antes de cada comando é executado.

No bash, você poderia usar o DEBUG trap para configurar um gancho preexec para fazer o mesmo.

Você definiria uma função preexec () algo assim:

preexec () { echo "-------------------------------"; }
preexec_invoke_exec () {
    [ -n "$COMP_LINE" ] && return  # do nothing if completing
    preexec
}
trap 'preexec_invoke_exec' DEBUG

Veja mais detalhes em O bash tem um gancho que é executado antes de executar um comando?

Eu não acho que isso funcione em todas as versões do bash. No meu antigo servidor Ubuntu, executando o bash 3.2.39 (1), help trap diz

If a SIGNAL_SPEC is DEBUG, ARG is executed after every simple command.

Em outro servidor, executando bash 4.1.2 (1), diz

If a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command.

que é o que precisamos. Portanto, certifique-se de que, em sua versão do bash, help trap diga " antes de cada comando simples".

    
por 30.04.2013 / 23:06
5

Se você estiver usando bash ou ksh para o seu shell, você pode criar uma função em um dos seus arquivos de ponto (.profile, .bash_profile, etc) da seguinte forma:

function hr {
    echo "--------------------------------------------------------------------------------"
}

Em seguida, você pode prefixar os comandos sempre que quiser o separador usando && ou ; como separadores de comando. Como em:

bash-[534]$ hr && ls
--------------------------------------------------------------------------------
ddtool_23.jnlp  prtconf-pv

ou

bash-[536]$ hr ; ls -la
--------------------------------------------------------------------------------
total 36K
drwxr-xr-x  2 tim staff    4 2012-12-06 15:02 ./
drwxr-xr-x 46 tim staff  134 2013-04-30 14:59 ../
-rw-------  1 tim staff 2.7K 2012-12-06 15:00 ddtool_23.jnlp
-rw-r--r--  1 tim staff  24K 2012-12-06 15:02 prtconf-pv

Eu faço isso. Eu tenho uma segunda função que imprime um separador mais espesso também.

function hr2 {
    echo "================================================================================"
}

Costumo usar essas funções em scripts de shell para fornecer separação a diferentes partes dos scripts, como hr2 entre tarefas principais e hr entre itens em uma instrução de loop. Isso facilita muito a leitura da saída do script.

    
por 30.04.2013 / 21:11

Tags