Estou tentando criar uma função para traduzir palavras por meio de um script personalizado:
function mean() {
~/scripts/translate.sh $1
}
Eu preferiria que a função fosse nomeada tr
, pois é muito mais curta e rápida de digitar em vez de mean
ou def
.
Qualquer tentativa de renomear a mean
função eventualmente colidirá com tr
o GNU Core Utilities ( /usr/bin/tr
).
Eu tentei:
alias tr='~/scripts/translate.sh'
ou
function tr() {
~/scripts/translate.sh $1
}
Fazendo com que um novo shell seja (aparentemente) executado tr
com a seguinte saída:
bash: export: `input,': not a valid identifier
bash: export: `exiting...': not a valid identifier
bash: export: `Vim:': not a valid identifier
': not a valid identifier
bash: export: `Vim:': not a valid identifier
': not a valid identifier
bash: export: `
Ao substituir o nome do utilitário padrão
tr
por uma função, você corre o risco de que outros usos desse utilitário padrão chamem sua função em vez da "real"tr
(por exemplo, código de configuração em~/.bashrc
ou em outros arquivos provenientes daí, ou mais tarde, quando funções específicas são chamadas em resposta ao que acontece na sessão do shell, por exemplo, para alterar o conteúdo do prompt primário, etc.)Isso é o que acontece no seu caso, e as estranhas mensagens de erro são causadas por alguma função do shell usando,
tr
mas obtendo acidentalmente o seutranslate.sh
script, em vez dotr
utilitário padrão.Sua melhor opção é não sobrecarregar o
tr
nome com seu código privado, mas sim encontrar um nome melhor para o wrapper do seu utilitário.Eu sugeriria
t
ou variações daquilo que não colide com o nome de qualquer utilitário já existente (observe que pode ser um alias para "repetir o último comando" em alguns shells; o manualTR
do shell sugere criar um alias para .)Tr
r
bash
r
fc -s
Em geral, não é uma boa ideia substituir os nomes de utilitários comuns por seus aliases, funções de shell, scripts, etc. Na melhor das hipóteses, você pode encontrar um comportamento de quebra aleatório como o relatado em sua pergunta e, na pior das hipóteses, você corre o risco comprometer a segurança dos seus sistemas e dos sistemas de outras pessoas.
Leitura relacionada: