Назовите сценарии в каталогах относительно основного сценария

В настоящее время я работаю со сценарием оболочки и делаю систему, где я пишу, что в сценарии оболочки говорится main.sh и тот же каталог там является каталогом, содержащим другие сценарии оболочки. Структура:

root_directory
|___scripts
|   |___script1.sh
|   |___script2.sh
|   |___script3.sh
|
|___main.sh

Теперь main.sh основной файл. В этом main.sh Я называю сценарии как

bash ./scripts/script1.sh
bash ./scripts/script2.sh

и так далее.
Все хорошо работает, когда я работаю main.sh файл от root_directory каталог. Но я хочу установить общую систему глобально, поскольку я могу работать main.sh зарегистрируйте отовсюду, и это может найти scripts подпапка.

Если какой-либо запрос затем не стесняется комментировать.

2
задан 14 November 2018 в 10:56

2 ответа

Можно получить каталог файла сценария путем выполнения

echo "${0%/*}"  # or
dirname "$0"

в сценарии поэтому просто измените строки на

bash "${0%/*}/scripts/script1.sh"          # or respectively
bash "$(dirname "$0")/scripts/script1.sh"

или определите переменную, например.

script_dir="${0%/*}/scripts"          # or respectively
script_dir="$(dirname "$0")/scripts"

и используйте это для путей:

bash "$script_dir"/script1.sh

В сценарии, $0 содержит путь файла сценария в его абсолютной или относительной форме в зависимости от того, как Вы назвали его. dirname просто извлекает имя каталога, которое является путем root_directory в Вашем случае. То же самое может быть, покончили bash Расширение параметра: ${0%/*} просто удаляет все из последней наклонной черты /, который является именем файла. С обоими путями путь остается полным или относительным путем.

Я нашел dirname решение на Получает путь текущего сценария при выполнении через символьную ссылку • U&L, upvote этот ответ (также ;) если Вы находите это полезным.

8
ответ дан 2 December 2019 в 01:31

Я обычно не отвечаю на вопросы на этой платформе, поэтому, пожалуйста, поправьте меня, если я наступлю на чьи-то пальцы.

Если я правильно понимаю ваш вопрос, вы хотите, чтобы main.sh работал глобально, когда вы вызываете bash-файл на терминале.

  • 1-й шаг - проверь, использовалось ли имя main какой-либо другой программой в моей операционной системе. запустите ~$ which <file name>, который в вашем случае ссылается на main, если результат не найден, это означает, что идентификатор можно использовать бесплатно
  • 2-й шаг: откройте файл bash и добавьте шебанг сверху. в основном. Сохраните файл и выйдите из
  • 3-ий переместите файл bash в /usr/bin или /usr/local/bin, для этого потребуется root-доступ.
  • В-четвертых, установите bash-файл в исполняемый файл, выполнив эту команду chmod +x <file-name>, что позволит любому пользователю запускать этот конкретный скрипт. если вы хотите ограничить, кто имеет доступ, используйте эту команду вместо этого chmod u+x <file-name>

После этого вы можете запустить файл bash где угодно. Вот хороший ресурс

0
ответ дан 2 December 2019 в 01:31

Другие вопросы по тегам:

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