ZC4001 - Deprecated Command
Descrição
Comando obsoleto, depreciado ou não-portátil foi utilizado.
Comandos Flagrados
| Comando | Problema | Alternativa |
|---|---|---|
which | Não é padrão POSIX | command -v ou type |
whereis | Não é portátil | command -v ou type |
finger | Obsoleto, muitas vezes indisponível | id, getent, ldapsearch |
mail | Comando legado | sendmail, mutt, mailx |
uudecode | Obsoleto | base64 -d |
uuencode | Obsoleto | base64 |
Exemplo Problemático
#!/bin/zsh
# which é não-padrão
python_path=$(which python3)
# uuencode é obsoleto
uuencode arquivo.bin > arquivo.uu
Solução Correta
Use alternativas portáveis e modernas:
#!/bin/zsh
# command -v é POSIX-compliant
python_path=$(command -v python3)
# base64 é o padrão moderno
base64 arquivo.bin > arquivo.b64
Diferença Entre Alternativas
which vs command -v vs type
#!/bin/zsh
# which - pode não existir, retorna path
which python3
# command -v - POSIX, portátil, retorna path ou alias
command -v python3
# type - builtin do shell, mais informativo
type python3
Para scripts que precisam ser portáveis:
#!/bin/zsh
# Mais seguro
if command -v python3 >/dev/null 2>&1; then
echo "Python3 disponível"
fi
Por Que Isso Importa
- Portabilidade - Scripts funcionam em diferentes sistemas (Linux, macOS, BSD)
- Manutenção - Comandos obsoletos podem ser removidos em futuras versões
- Segurança - Comandos antigos podem ter vulnerabilidades não corrigidas
Quando Pode Ser Aceitável
Em ambientes controlados onde:
- O comando é garantido existir
- É uma preferência de equipe/documentada
- Está em código legado sendo mantido
Referências
- POSIX Utilities
- Shellcheck SC2230 - which vs command -v