Взгляните на 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.
Когда bash выполняет сценарий оболочки не -в интерактивном режиме,.bashrc не читается, а файл функции не загружается.
Если для BASH _ENV задано имя файла функции, этот файл читается и выполняется, как указано в INVOCATION.
Поэтому нет необходимости создавать файл функции в каждом сценарии оболочки, который использует эту функцию.
Пример для иллюстрации:
Не Ubuntu, а Debian -linux 4.14.0 -3 -amd64 #1 SMP Debian 4.14.17 -1 (2018 -02 -14 )x86 _64 GNU/Linux с Xfce 4.12
Создайте файл функций в своем$HOME
cat mesfuncbash
piste ()
{
echo $0 >> ~/lapiste
date >> ~/lapiste
}
Создайте скрипт, использующий эту функцию
cat lescript
#!/bin/bash
echo $0
. ~/mesfuncbash
piste
echo fin
здесь скрипт исходит из файла функции
Создать лаучер для lescript
наDesktop
Терминал не нужен
выполнить его.
Файл ~/lapiste
обновлен.
Теперь удалите . ~/mesfuncbash
из lescript
выполнить его
Файл ~/lapiste
не обновлен.
Если вы запускаете lescript
на терминале
Баш тебе скажет:
line 3: piste: command not found
Теперь вы должны установить BASH_ENV
на имя файла функции.
В debian с xfce .profile
не читается при запуске, поэтому вы не можете использовать его для установки BASH_ENV
.
Вы должны создать файл .xsessionrc
в своем $HOME
.
cat.xsessionrc
export BASH_ENV="$HOME/mesfuncbash"
выход из системы и вход в систему, таким образом .xsessionrc
читается при запуске
Теперь вы можете запускать лаучер на рабочем столе. и файл ~/lapiste
обновляется.