Às vezes uso o comando type para visualizar meus códigos:
$ type squared
squared is a function
squared ()
{
local t=$(($1*$1));
echo $t
}
Posso fazer o mesmo com funções internas:
$ type __expand_tilde_by_ref
__expand_tilde_by_ref is a function
__expand_tilde_by_ref ()
{
if [[ ${!1-} == \~* ]]; then
eval $1="$(printf ~%q "${!1#\~}")";
fi
}
Mas se eu colocar esses comandos neste script:
$ cat testit.sh
#!/bin/bash
source ~/bin/all-my-functions.sh
type squared
type __expand_tilde_by_ref
e execute-o:
$ ./testit.sh
Eu recebo:
squared is a function
squared ()
{
local t=$(($1*$1));
echo $t
}
./testit.sh: line 4: type: __expand_tilde_by_ref: not found
Ele não reconhece o comando interno. Por que?
Eu verifiquei o tipo e não é um alias:
$ type -t type
builtin
__expand_tilde_by_ref
é provavelmente definido em/etc/bash_completion
(na verdade/usr/share/bash-completion/bash_completion
). Olhe para o seu~/.bashrc
, deve haver algumas linhas para incluir/etc/bash_completion
apenas se for um shell interativo e não for aplicado a um arquivo de script.