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 otest
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ó chamocd
semkdir
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.