Abrindo um arquivo do terminal apenas digitando seu nome

15

Eu sei que xdg-openabrirá do terminal um arquivo no aplicativo preferido do usuário como este:

xdg-open filename

Mas eu me pergunto como posso abrir um arquivo do diretório atual em seu aplicativo padrão apenas digitando:

filename

seguido por Enter, é claro. Nada mais.

Radu Rădeanu
fonte
1
Presumivelmente, você pode modificar a command_not_found_handle()função /etc/bash.bashrcpara verificar e abrir xdg-arquivo no mesmo diretório?
chronitis
1
Eu posso reduzir alguns dos seus riscos usando o alias. alias open = "xdg-open" open é uma variável simplesmente. você pode torná-lo tão curto quanto quiser.
2441313

Respostas:

20

Use o command-not-foundgancho do Ubuntu , conforme especificado em Command Not Found Magic . Atualmente, é usado para sugerir pacotes para instalação. Consulte o /usr/share/doc/command-not-found/READMEque deve ser instalado no seu sistema.

Melhor ainda, porque não depende do command-not-foundpacote, (re) implemente o Bash interno command_not_found_handlepara fazer um xdg-openif se $1for um arquivo existente e delegar todos os outros casos à implementação anterior.

# Save the existing code for the handler as prev_command_not_found_handle.
# Bit of a hack, as we need to work around bash's lack of lexical closure,
# and cover the case when it is not defined at all.
eval "prev_$(declare -f command_not_found_handle)" >& /dev/null \
     || prev_command_not_found_handle () { 
            echo "$1: command not found" 1>&2
            return 127
        }

# Define the new implementation, delegating to prev_handler.
command_not_found_handle () {
    if [ -f "$1" ]; then
        xdg-open "$1"
    else
        prev_command_not_found_handle "$@"
    fi
}

Boa pergunta, característica bacana.


Pensando um pouco mais: você pode não gostar tanto do recurso quanto pensa, a menos que também estenda o bash_completionmanipulador. Imagine querer abrir file-with-a-long-name.txte depois definir

alias o='xdg-open'  

fará (aproximadamente) quatro pressionamentos de tecla suficientes:

o f<Tab><Enter>

Considerando que digitar o nome completo do arquivo leva um 26 tedioso - e isso exclui o retrocesso nos erros inevitáveis.

zwets
fonte