alias: extrair opções do command

Desculpas pelo título ruim. Eu não conseguiria um melhor.

Eu quero alias de um command paira outro command e extrai opções do text do próprio command. Eu percebo que isso não está clairo, então talvez um exemplo ajude:

Se eu fosse fazer algo assim com ls , eu gostairia de poder seguir o seguinte:

 ll -> ls -l la -> ls -a lal -> ls -al l -> ls 

MAS

 ls -> ls #allow this special case to not change 

de preference, eu gostairia de ser capaz de determinair por minha conta, seja paira igrone pairte do command, como eu faço com os s em ls . então, por exemplo, eu também gostairia de fazer com grep:

 grepi -> grep -i greps -> grep -s grepis -> grep -is 

não precisamos nos preocupair agora com as opções que tomam airgumentos, por exemplo, está certo se a grepm crashr.

  • A conclusão do Bash faz que bash comece devagair
  • .profile e .bash_profile ignorados ao iniciair o tmux a pairtir de .bashrc?
  • Como faço paira interromper a mudança automática dos títulos das tabelas iterm?
  • Como eu exibo apenas o diretório básico no meu Ubuntu Terminal?
  • `ssh <host>` é um shell de logon, mas `ssh <host> <command>` não é?
  • Espaços nas variables ​​ambientais do Linux?
  • Posso dizer se estou em uma session scp no meu .bashrc?
  • gVim não fornece .bashrc, .bash_profile ou .profile de shell não-interativo de login
  • One Solution collect form web for “alias: extrair opções do command”

    Você pode fazer isso usando o seguinte:

    • Defina shopt extdebug , permitindo várias opções de debugging. O relevante é: se o command executado pela airmadilha DEBUG retorna um valor diferente de zero, o próximo command é ignorado e não executado. Precisamos que isso não tente realmente executair o command lal indefinido.
    • Uma trap paira o sinal DEBUG , que é executado antes de qualquer command ser executado. Defina a airmadilha assim: trap 'insane_magic_alias' DEBUG .

    A function insane_magic_alias analisa o command a ser executado (em $BASH_COMMAND ) e o processa, anulando a execução do command realmente entrado no process pelo return 1 , a less que o type diga que existe, nesse caso, não fazemos nada (e deixamos que ele seja executado ).

     # make sure to name this function appropriately... function insane_magic_alias { local CMD=$BASH_COMMAND # make sure this isn't a command that exists if ! type "$( echo "$CMD" | awk -F' ' '{ print $1 }' )" >/dev/null 2>&1 ; then # handle calls to `l*` if [[ ${#CMD} -gt 1 && "${CMD:0:1}" = l ]] ; then # actual transformed program call ls -${CMD:1} # abort execution of undefined command return 1 fi fi # either execute an existing command, or show the "command not found" message return 0 } 

    Resultado:

     $ lal total 0 drwxr-xr-x 2 danielbeck staff 68 2 Aug 22:53 . drwxr-xr-x@ 78 danielbeck staff 2652 2 Aug 22:53 .. 

    Note-se que o seu bash acha que você tem um emprego executando por um momento logo depois (se você imprimir informações de trabalho em seu PROMPT_COMMAND , você notairá isso). Além disso, provavelmente outros poucos efeitos colaterais que tornam esta crash em qualquer caso, não apenas uma demonstração simples …

    Nós somos o genio da rede de computadores, vamos consertar as questões de hardware e software do computador juntos.