2017-01-18 3 views
0

Интересно, есть ли хороший способ загрузить другой сценарий оболочки без $ (basename "$ 0"), так как иногда «$ 0» не задано.

Для exmaple "$ 0" будет "-sh" для оболочки входа.

Существует такая же проблема в отношении решения cwd.

ответ

2

Вы можете использовать это выражение, чтобы узнать директорию сценария родительского Bash:

dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 

Тогда вы можете назвать ваш сценарий как это:

cd $dir; source ./other_script 

или

source $dir/other_script 

Посмотрите этот родственный пост: Getting the source directory of a Bash script from within

+0

Что относительно решения non-bash? Есть ли решения оболочки POSIX? –

+0

Я не нашел решение POSIX. Если бы я это сделал, я проверил вывод '$ (dirname $ 0)'. Если это абсолютный путь, просто используйте этот каталог. Если это относительный путь, используйте '$ PWD/$ (dirname $ 0)'. В противном случае пересечь '$ PATH' и искать' $ 0' в каждом каталоге. – codeforester

+0

Это все равно не будет работать, так как иногда $ 0 является -sh, что не имеет отношения к какому-либо пути. –

Смежные вопросы