como adicionar uma opção personalizada ao comando mkdir

1 resposta

6

Use o command builtin para chamar um comando externo, ignorando qualquer função de mesmo nome. Além disso:

  • O que segue if é um comando comum. Para executar uma comparação de cadeia de caracteres, invoque o test integrado ou o [ incorporado com a mesma sintaxe, mais uma% final] ou a construção [[ … ]] que tenha uma sintaxe mais descontraída. Consulte usando um ou dois colchetes - bash para obter mais informações.
  • O operador -eq é para comparar inteiros. Use = para comparar strings.
  • Eu adicionei um suporte limitado para passar vários argumentos (incluindo opções como -p ). Abaixo, só chamo cd se mkdir tiver sido bem-sucedido e eu o chamar no último argumento passado para a função.
  • -g só será reconhecido como o primeiro argumento. Opções de análise para localizá-lo e removê-lo de qualquer posição que seja possível, mas mais difícil.
mkdir () {
  local do_cd=
  if [ "$1" = "-g"]; then
    do_cd=1
    shift
  fi
  command mkdir "$@" &&
  if [ -n "$do_cd" ]; then
    eval "cd \"\${$#}\""
  fi
}

Eu não recomendo definir suas opções personalizadas. Eles não serão exibidos em --help ou páginas do manual. Eles não são mais memoráveis do que definir um comando com um nome diferente: ou você não se lembra de tê-los, e não há vantagem em comparação a um comando com um nome diferente ou não se lembra de que eles são personalizados e, em seguida, você pode descobrir isso imediatamente com um nome personalizado perguntando ao shell se é um comando ou uma função interna ( type mkcd ), o que não é o caso de uma opção personalizada. Existem casos de uso para sobrescrever um comando padrão, mas este não é um.

    
por 27.02.2017 / 00:37