Как разрешить запуск сценария кому угодно в любом месте

Переменная $ {D} позволяет устанавливать создаваемое программное обеспечение в каталог, отличный от его реальной цели. Например, вы можете настроить программное обеспечение так, чтобы libdir было / usr / lib , но это для целевого устройства; когда вы запускаете установку в своей системе сборки, вы не хотите, чтобы вновь созданные файлы фактически устанавливались в / usr / lib , вы хотите разместить их где-то изолированно, чтобы их можно было легко идентифицировать и скопировано в целевую систему. Итак, вы создаете временный каталог и устанавливаете туда:

mkdir /tmp/yocto-target
make install D=/tmp/yocto-target

Таким образом, файлы попадают в / tmp / yocto-target / usr / lib и так далее. Затем вы можете заархивировать все / tmp / yocto-target с помощью любого инструмента, который вам больше нравится, отбросив префикс / tmp / yocto-target , скопировать архив на целевое устройство и установить его содержимое там.

В других системах сборки переменная DESTDIR используется по той же причине.

1
03.04.2017, 02:09
2 ответа

Вы можете выполнить сценарий, либо указав путь (относительный или абсолютный) к сценарию, либо убедившись, что каталог, содержащий сценарий, находится в вашей оболочке. поиск $PATH.

Временно игнорируя тот факт, что test не является хорошим названием для этого примера, так как есть другие test, которые может выполнить ваша оболочка, вы всегда можете выполнить скрипт, name test, если содержащий каталог находится в вашем $PATH. Это то, что вы сделали с export PATH=$PATH:/home/Bill/scripts. В терминале, в котором вы установили этот $PATH, вы можете выполнить test независимо от вашего текущего рабочего каталога.

Если скрипт не в вашем $PATH или вы хотите явно указать какой тест вы хотите выполнить, вы можете указать не только имя файла, но и относительный или абсолютный путь к файлу. Итак, опять же, независимо от вашего текущего рабочего каталога, вы всегда можете выполнить скрипт, указав полный путь: /home/Bill/scripts/test.

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

/home/Bill/scripts$ ./test
/home/Bill$ scripts/test
/home/Bill/documents$ ../scripts/test
/home/James/documents$ ../../Bill/scripts/test

Причина, по которой вы получаете сообщение об ошибке при попытке выполнить

/home/Bill$ ./test

, заключается в том, что нет файла /home/Bill/test, который что вы пытаетесь выполнить ("файл test в текущем каталоге . ")


Если вы хотите, чтобы все пользователи могли запускать скрипт просто с его именем, не указывая абсолютный или относительный путь к сценарию, он должен быть у всех в $PATH. Вы можете сделать это, либо попросив каждого пользователя добавить /home/Bill/scripts в свой $PATH, либо поместив скрипт в папку по умолчанию $. PATH для всех пользователей, например /usr/local/bin. Но вам придется называть свой скрипт иначе, чем test, потому что test — это особый случай: это встроенная команда оболочки.

3
27.01.2020, 23:19

Называть скрипт "test" - не лучшая идея, потому что уже есть команда "test":

type test
test is a shell builtin

Кроме этого, переменная PATH всегда работает на найдите программу или сценарий. Поместите путь к вашему скрипту в PATH с помощью

export PATH=/your/place/to/directory_of_script:$PATH

, чтобы сделать ваш скрипт доступным. Но не используйте имена встроенной оболочки или уже существующие имена программ или скриптов!

1
27.01.2020, 23:19

Теги

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