В настоящее время я работаю со сценарием оболочки и делаю систему, где я пишу, что в сценарии оболочки говорится 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
подпапка.
Если какой-либо запрос затем не стесняется комментировать.
Можно получить каталог файла сценария путем выполнения
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 этот ответ (также ;) если Вы находите это полезным.
Я обычно не отвечаю на вопросы на этой платформе, поэтому, пожалуйста, поправьте меня, если я наступлю на чьи-то пальцы.
Если я правильно понимаю ваш вопрос, вы хотите, чтобы main.sh
работал глобально, когда вы вызываете bash-файл на терминале.
main
какой-либо другой программой в моей операционной системе. запустите ~$ which <file name>
, который в вашем случае ссылается на main, если результат не найден, это означает, что идентификатор можно использовать бесплатно /usr/bin
или /usr/local/bin
, для этого потребуется root-доступ. chmod +x <file-name>
, что позволит любому пользователю запускать этот конкретный скрипт. если вы хотите ограничить, кто имеет доступ, используйте эту команду вместо этого chmod u+x <file-name>
После этого вы можете запустить файл bash где угодно. Вот хороший ресурс