After
принимает только список имен юнитов, поэтому это After=basis@foo.service basis@bar.service basis@xyz.service
или с другого конца Before=complex.service
в basis@.service
.
Вы можете добавить cd -P -- "${0%/*}" || exit
или cd -P -- "$(dirname -- "$0")" || exit
к вашему скрипту, чтобы перейти в каталог, в котором находится скрипт.
$0
представляет собой , встроенный -в переменную , содержащую путь к сценарию, переданному интерпретатору. (обычно будет абсолютным путем, если сценарий искали в$PATH
).
Конструкция ${0%/*}
использует встроенную оболочку -в String Manipulation для удаления из конца самого короткого бита переменной, соответствующей /*
, что оставляет вам только имя каталога (будет работать до тех пор, пока $0
содержит хотя бы один символ /
, что обычно имеет место ).
Я не знаю, работает ли это под MacOS; это происходит под Linux:
#! /bin/bash
arg1="$(awk 'BEGIN { RS="\0" }; NR==2 { print $0 "x"; exit; }' /proc/$$/cmdline; echo x)"
arg1="${arg1%x}"
if [[ $arg1 =~ / ]]; then
# path contains at least one /
dir_rel_path="${arg1%/*}"
cd "$dir_rel_path"
fi
echo "$PWD"