относительная позиция сценария оболочки из файла

Afterпринимает только список имен юнитов, поэтому это After=basis@foo.service basis@bar.service basis@xyz.serviceили с другого конца Before=complex.serviceв basis@.service.

0
01.07.2020, 00:44
2 ответа

Вы можете добавить cd -P -- "${0%/*}" || exitили cd -P -- "$(dirname -- "$0")" || exitк вашему скрипту, чтобы перейти в каталог, в котором находится скрипт.

$0представляет собой , встроенный -в переменную , содержащую путь к сценарию, переданному интерпретатору. (обычно будет абсолютным путем, если сценарий искали в$PATH).

Конструкция ${0%/*}использует встроенную оболочку -в String Manipulation для удаления из конца самого короткого бита переменной, соответствующей /*, что оставляет вам только имя каталога (будет работать до тех пор, пока $0содержит хотя бы один символ /, что обычно имеет место ).

1
18.03.2021, 23:23

Я не знаю, работает ли это под 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"
0
18.03.2021, 23:23

Теги

Похожие вопросы