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 otestintegrado 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ó chamocdsemkdirtiver sido bem-sucedido e eu o chamar no último argumento passado para a função. -
-gsó 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.