Переменная $ {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
используется по той же причине.
Вы можете выполнить сценарий, либо указав путь (относительный или абсолютный) к сценарию, либо убедившись, что каталог, содержащий сценарий, находится в вашей оболочке. поиск $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
— это особый случай: это встроенная команда оболочки.
Называть скрипт "test" - не лучшая идея, потому что уже есть команда "test":
type test test is a shell builtin
Кроме этого, переменная PATH всегда работает на найдите программу или сценарий. Поместите путь к вашему скрипту в PATH с помощью
export PATH=/your/place/to/directory_of_script:$PATH
, чтобы сделать ваш скрипт доступным. Но не используйте имена встроенной оболочки или уже существующие имена программ или скриптов!