попробуйте find
с комбинацией -execdir
:
find /app/user/ -type f -name 'service.sh' \
-execdir./service.sh stop \; \
-execdir./service.sh start \;
он выполнит ./service.sh start
, только если ./service.sh stop
был успешным.
Вы можете провести тест со сценарием, как показано ниже, скопированным в оба каталога A и B:
script.sh
это:
# !/bin/sh
echo 'executing script in directory' "$PWD"
echo $1
echo
дерево каталогов:
.
├── dir_A
│ └── script.sh
└── dir_B
└── script.sh
запуск команды:
$ find -type f -name 'script.sh' -execdir./script.sh stop \; -execdir./script.sh start \;
executing script in directory /home/αғsнιη/test/dir_A
stop
executing script in directory /home/αғsнιη/test/dir_A
start
executing script in directory /home/αғsнιη/test/dir_B
stop
executing script in directory /home/αғsнιη/test/dir_B
start
Существует переменная среды, управляющая тем, где Glib ищет «схемы настроек»:GSETTINGS_SCHEMA_DIR
. Итак, выполняем:
export GSETTINGS_SCHEMA_DIR="/opt/myapp/share/glib-2.0/schemas:${GSETTINGS_SCHEMA_DIR}"
(при условии, что там находятся файлы схемы вашего приложения ).
Более "тупой" вариант, но который может решить некоторые другие проблемы, это добавление пути к XDG_DATA_DIRS
переменным окружения; эти пути используются, в частности, как корни для поиска схем. Так:
export XDG_DATA_DIRS="/opt/myapp/share/:${XDG_DATA_DIRS}"
Спасибо @steeldriver за комментарий.