Как добавить модульный скрипт bash в `bin `?

Группа GNU

grep -oP 'http://.+?(?=http://|$)' url_file
0
09.05.2019, 17:49
3 ответа

Используйте параметр положения$0и dirname:

.
#!/bin/bash

echo running "$(dirname "$0")/$(basename "$0")"
source "$(dirname "$0")/modules/script-1"
2
28.01.2020, 02:18

Вы должны извлечь реальный путь к вашему скрипту, а затем получить ваши модули:

#!/bin/bash

FULLPATH_OF_MAIN=`realpath $BASH_SOURCE`
SOURCEDIR=`dirname ${FULLPATH_OF_MAIN}`

source ${SOURCEDIR}/modules/script-x
1
28.01.2020, 02:18

Использование точки(.)в ваших каталогах делает их относительными к точке "этот каталог" (pwd ).

Если вы не возражаете против статических каталогов (относительно пользовательского каталога (~)), вы можете использовать:

source ~/bin/modules/script-x     # or equivalent:. ~/bin/modules/script-x

Если вам нужны каталоги относительно каталога, в котором было запущено основное -приложение (любой каталог ), вы можете использовать (в bash):

source "${BASH_SOURCE%/*}/modules/script-x"

Или во многих оболочках:

source "$(basename "$0")/modules/script-x"

Это $0будет работать при условии, что способ вызова основного -приложения заставит имя, указанное в списке ps, содержать правильный путь к файлу. Это не всегда так:

$ exec -atestname /bin/bash
$ echo "$0"
testname

Если ваш каталог может содержать ссылки и вам нужен канонический путь (без ссылок или относительных (.. )используемые имена ), используйте:

source "$(basename "$(readlink -f -- "$BASH_SOURCE")" )/modules/script-x"

Или замените "$BASH_SOURCE"на "$0"(, если необходимо ).

Обратите внимание :, что в некоторых крайних случаях вам может понадобиться использовать realpathвместоreadlink -f

Или просто cdв правильный каталог (избегайте readlink или realpath):

source "$( cd "${BASH_SOURCE%/*}" > /dev/null && pwd )/modules/script-x"
1
28.01.2020, 02:18

Теги

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