Dê uma olhada no BASH_ENV
INVOCATION
When bash is started non-interactively, to run a shell script, for
example, it looks for the variable BASH_ENV in the environment, expands
its value if it appears there, and uses the expanded value as the name
of a file to read and execute. Bash behaves as if the following com‐
mand were executed:
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
but the value of the PATH variable is not used to search for the file‐
name.
BASH_ENV
If this parameter is set when bash is executing a shell script,
its value is interpreted as a filename containing commands to
initialize the shell, as in ~/.bashrc. The value of BASH_ENV is
subjected to parameter expansion, command substitution, and
arithmetic expansion before being interpreted as a filename.
PATH is not used to search for the resultant filename.
Quando o bash executa um script de shell de forma não interativa, o .bashrc não é lido e o arquivo de função não é originado.
Se BASH_ENV é definido como o nome do arquivo de função, esse arquivo é lido e executado como dito em INVOCATION.
Portanto, não é necessário criar o arquivo de função em cada script de shell que usa a função.
Exemplo para ilustrar:
Não Ubuntu, mas debian-linux 4.14.0-3-amd64 # 1 SMP Debian 4.14.17-1 (2018-02-14) x86_64 GNU / Linux com Xfce 4.12
Crie um arquivo de funções no seu $HOME
cat mesfuncbash
piste ()
{
echo $0 >> ~/lapiste
date >> ~/lapiste
}
Crie um script que use a função
cat lescript
#!/bin/bash
echo $0
. ~/mesfuncbash
piste
echo fin
aqui o script fonte do arquivo de função
Crie um laucher para lescript
no Desktop
Não há necessidade de terminal
execute-o.
O arquivo ~/lapiste
é atualizado.
Agora, remova . ~/mesfuncbash
de lescript
execute-o
O arquivo ~/lapiste
não é atualizado.
Se você executar lescript
em um terminal
Bash lhe diz:
line 3: piste: command not found
Agora você deve definir BASH_ENV
como o nome do arquivo de função.
No debian com xfce, .profile
não é lido na inicialização, então você não pode usá-lo para definir BASH_ENV
.
Você deve criar um arquivo .xsessionrc
no seu $HOME
.
cat .xsessionrc
export BASH_ENV="$HOME/mesfuncbash"
logout e login, desta forma .xsessionrc
é lido na inicialização
Agora, você pode executar o laucher na área de trabalho
e o arquivo ~/lapiste
é atualizado.