Дополнительно
Как вызвать сценарий оболочки из другого сценария оболочки?
У меня есть два сценария оболочки, a.sh
и b.sh
.
Как я могу вызвать b.sh
из сценария оболочки a.sh
?
664
17
Есть несколько разных способов сделать это:
Сделайте другой скрипт исполняемым, добавьте
#!/ bin / bash
строка вверху и путь, по которому файл находится к переменной среды $ PATH. Тогда вы можете назвать это обычной командой;Или назовите его командой
source
(псевдоним.
) вот так:source / path / to / script
;Или используйте команду
bash
, чтобы выполнить ее:/ bin / bash / path / to / script
;Первый и третий методы выполняют скрипт как другой процесс, поэтому переменные и функции в другом скрипте не будут доступны. Второй метод выполняет скрипт в процессе первого скрипта и извлекает переменные и функции из другого скрипта, чтобы их можно было использовать из вызывающего скрипта.
Во втором методе, если вы используете
exit
во втором скрипте, он также выйдет из первого скрипта. Что не произойдет в первом и третьем методах.Проверь это.
Есть несколько способов сделать это. Терминал для выполнения скрипта:
Все это правильно для пути с пробелами!!!
Ответ, который я искал:
Как уже упоминалось,
exec
заменяет оболочку без создания нового процесса. Однако мы можем поместить его в подгруппу, что делается с использованием паратезов.РЕДАКТИРОВАТЬ: На самом деле
( "путь / к / сценарий")
достаточно.Зависит от. Вкратце... Если вы хотите загрузить переменные на текущую консоль и выполнить их, вы можете использовать
source myshellfile.sh
в своем коде. Пример:Если вы просто хотите выполнить файл, и единственное, что вас интересует, это результат, вы можете сделать:
Я надеюсь, поможет вам. Спасибо.
Вы можете использовать
/ bin / sh
для вызова или выполнения другого скрипта (через ваш фактический скрипт):Выход будет:
Просто добавьте в строку все, что вы набрали бы в терминале для выполнения скрипта!& Лт; br > например.:
если выполняемый скрипт не находится в том же каталоге, просто используйте полный путь к сценарию.& Лт; br > например.:` / home / user / script-directory /./myscript.sh &
Сначала вы должны включить файл, который вы вызываете:
тогда вы называете свою функцию следующим образом:
Простой источник поможет вам. Для Ex.
Верхний ответ предлагает добавить
#!/ bin / bash
строка первой строке вызываемого субсценария. Но даже если вы добавите шебанг, он будет намного быстрее * < / sup > запустить скрипт в подоболочке и захватить вывод:$ (источник SCRIPT_NAME)
Это работает, когда вы хотите продолжать работать с одним и тем же интерпретатором (например,. от bash к другому сценарию bash) и гарантирует, что линия shebang субсценария не будет выполнена.
Например:
Вывод:
Предположим, что новый файл "/ home / satya / app / app_specific_env", а содержимое файла выглядит следующим образом
Добавьте эту ссылку на файл в файл ~/.bashrc
Когда вы перезагрузите компьютер или перезагрузите компьютер, попробуйте
echo $ FAV_NUMBER
в терминале. Это выведет значение.На всякий случай, если вы хотите сразу увидеть эффект,
source ~/.bashrc
в командной строке.Это было единственное, что мне было нужно. Как только исполняемый скрипт становится исполняемым, как это, вам (по крайней мере, в моем случае) не нужна какая-либо другая дополнительная операция, такая как
sh
или./
пока вы звоните в скрипт.Благодаря комментарию @Nathan Lilienthal
Используйте бабки.
Затем извлеките выходные данные скрипта производителя в качестве аргумента в потребительском скрипте.
Есть некоторые проблемы с импортом функций из другого файла. Во-первых : Вам не нужно делать этот файл исполняемым. Лучше не делать этого! просто добавь
импортировать все функции. И все они будут такими, как если бы они были определены в вашем файле. Второй : Вы можете определить функцию с тем же именем. Это будет перезаписано. Плохо. Вы можете заявить об этом
и только после этого импортируйте. Таким образом, вы можете вызвать старую функцию под новым именем. Третий : Вы можете импортировать только полный список функций, определенных в файле. Если некоторые не нужны, вы можете отменить их. Но если вы переписаете свои функции после отмены, они будут потеряны. Но если вы установите ссылку на нее, как описано выше, вы можете восстановить после сброса с тем же именем. Наконец В общей процедуре импорта опасно и не так просто. Быть осторожен! Вы можете написать сценарий, чтобы сделать это проще и безопаснее. Если вы используете только часть функций (не все), лучше разделите их на разные файлы. К сожалению, эта техника не очень хорошо зарекомендовала себя в bash. Например, в Python и некоторых других языках сценариев это легко и безопасно. Можно сделать частичный импорт только необходимых функций со своими именами. Мы все хотим, чтобы в следующих версиях bush была сделана та же функциональность. Но теперь мы должны написать много дополнительной трески, чтобы делать то, что вы хотите.
Если у вас есть другой файл в том же каталоге, вы можете сделать:
или
или