Posso criar um alias para a string vazia?

Posso criar um alias para a string vazia?

No bash, você pode alias de um comando nulo para alguma coisa? Em outras palavras, reconhecer que o usuário pressionou apenas a Entertecla no prompt do shell? Por exemplo, se você deseja limpar a tela com uma entrada de shell em branco, como usar o alias Enterpara o clearcomando?

Responder1

Veja como (efetivamente) criar um alias para um comando vazio:

Coloque o seguinte em seu .bashrc:

command1()
{
    if [ "$BASH_COMMAND" != command2 ]
    then
        command_flag=1
    fi
    return 0
}
trap command1 debug
command2()
{
    if [ ! "$command_flag" ]
    then
        echo "clear"                            # Put whatever command(s) you want here.
    fi
    command_flag=
}
PROMPT_COMMAND=command2

Se necessário, substitua command1e command2de forma consistente por palavras que você provavelmente não digitará aleatoriamente.

  • trap command1 debugfará com que a command1função seja executada toda vez que você (o usuário) digitar um comando.
    • Se o comando mais recente a ser executado não foi command2, command1será definido command_flag.
  • Atribuir command2a PROMPT_COMMAND fará com que command2seja executado sempre que o shell estiver prestes a emitir um prompt.
    • Se command_flagtiver um valor que não esteja em branco, significa que command1acabou de ser executado, o que significa que o usuário acabou de executar um comando. Neste caso, não faça nada.
    • Se command_flagisso acontecernãotem um valor que não está em branco, isso significa que o usuário acabou de clicar Enter. Neste caso, faça o que deseja (por exemplo, limpar a tela).
    • Em ambos os casos, deixe command_flagem branco, para que tudo funcione no próximo ciclo.

Nota: tenho certeza de que isso é específico do bash (ou seja, não é compatível com POSIX).

Esta resposta foi basicamente copiada da minha resposta paraAdicionando espaço vertical após comando no bash. Veja tambémdiga se o último comando estava vazio em PROMPT_COMMAND para outras abordagens.

Responder2

TL;DR: Ctrl-llimpará a tela sem imprimir um caractere ou pressionar enter. Este é provavelmente o mais próximo que você chegará da funcionalidade desejada. Você pode executar um comando antes ou depois de cada comando ou pode criar um alias para um único caractere. Você não pode criar um alias para a string vazia.

Os aliases não são necessariamente projetados para serem tudo inserido em uma linha.

alias ll='ls -l'

é um bom exemplo disso. Você pode fazer ll /path/to/other/dire obter resultados.

Tudo o que um alias faz é literalmente alterar a(s) primeira(s) palavra(s) digitada(s) na linha de comando para o valor que você deu a ele

O único requisito para que um alias funcione é que ele seja seguido de um caractere não imprimível (espaço/tabulação/nova linha). No nosso caso, llpor si só é válido, mas ll-/mypath/não é, porque é possível (e frequentemente feito) criar um alias para alguns caracteres que podem ser o início de outro comando (ou seja, alias gi='git init'só pode resolver exatamente gi, não git, que é o que mais as pessoas querem e esperam).

Não é possível criar um alias para uma string vazia, pois isso seria no início detodoentrada de linha de comando.

Se você deseja que um comando seja executado sempre, você pode usar PS0(assumindo uma versão recente do bash) para executar algo antes de cada comando ou PROMPT_COMMANDpara executar algo após cada comando. Por exemplo:

PROMPT_COMMAND='echo $?'

ecoaria o valor de retorno do comando que você executou após cada comando executado.

O Bash não tem uma boa maneira de concluir uma ação se, e somente se, você inseriu uma linha vazia na linha de comando. Bash não é sensível a espaços em branco dessa forma.

informação relacionada