alternativo do alias do sufixo Zsh no bash

1

No zsh, posso abrir qualquer arquivo com um sufixo ou extensão especial, como .log ou .txt, com um programa digitando apenas o nome do arquivo

$ alias -s txt=nano
$ word.txt 

Isso abre o arquivo word.txt com nano. Como posso fazer isso no bash?

    
por mostafa elmadany 31.03.2017 / 01:09

1 resposta

0

Que tal exec zsh ?

Mas esse recurso pode realmente ser implementado no bash (desde a versão 4.0; usuários do OSX, consulte o parágrafo anterior). Mais ou menos. Quando o bash encontra um comando que não é encontrado no PATH , ele executa uma função chamada command_not_found_handle . Você pode escrever uma função que tente abrir o arquivo se for um arquivo no diretório atual.

typeset -A extension_aliases
command_not_found_handle () {
  if [[ $# -eq 1 && -e $1 && $1 = *.* ]]; then
    local handler="${extension_aliases[${1##*.}]}"
    if [[ -n $local_handler ]]; then
      eval "$local_handler \"\$@\""
      return
    fi
  fi
  return 127
}

Em vez de alias -s txt=nano , use extension_aliases[txt]=nano .

Existem limitações para essa abordagem. O arquivo deve estar no diretório atual, porque command_not_found_handle é chamado apenas com um nome de comando que não contém uma barra. Além disso, você não terá conclusão para o nome do arquivo.

É muito mais simples usar os mecanismos existentes:

xdg-open word.txt

ou no Debian e derivados

see word.txt

Você obtém muitos benefícios: já existe um banco de dados do sistema que mapeia extensões para programas, a conclusão funcionará e não requer nenhum tratamento especial do shell. Ele exige um pouco mais de digitação, mas você pode definir um alias de um caractere para ele (você precisará de um espaço depois dele) ou uma associação de chave que insira xdg-open no início da linha:

bind -x '"\eo": READLINE_LINE="xdg-open $READLINE_LINE"; READLINE_POINT+=9'
    
por 01.04.2017 / 03:10

Tags