Определения хостов всегда являются глобальными.
Итак, у меня на роутере 3 сети; «LAN» 10.0.0.0/24, «гость» 10.100.100.0/24 и «IoT» 10.100.200.0/24
Мой dhcpd.conf
имеет следующую конфигурацию
subnet 10.0.0.0 netmask 255.255.255.0 {
authoritative;
option routers 10.0.0.1;
blah;
}
subnet 10.100.100.0 netmask 255.255.255.0 {
authoritative;
option routers 10.100.100.1;
blah;
}
subnet 10.100.200.0 netmask 255.255.255.0 {
authoritative;
option routers 10.100.200.1;
blah;
}
host machine1 {
hardware ethernet xx:xx:xx:xx:xx:xx;
fixed-address 10.0.0.13;
option host-name "machine1";
}
host machine2 {
hardware ethernet yy:yy:yy:yy:yy:yy;
fixed-address 10.100.200.15;
option host-name "machine2";
}
DHCPd правильно определяет, что machine1
находится в локальной сети, а machine2
— в подсети IoT, и отправляет правильную конфигурацию (маску сети, маршрут по умолчанию, DNS-сервер и т. д. и т. д. ), относящиеся к этой подсети.
Если у вас есть машина, которая может подключаться к нескольким интерфейсам, и вы хотите, чтобы они получали разные адреса, вы можете перечислить хост несколько раз. Например, мой мобильный телефон:
host s8 {
hardware ethernet aa:aa:aa:aa:aa:aa;
fixed-address 10.0.0.34;
option host-name "s8";
}
host s8-guest {
hardware ethernet aa:aa:aa:aa:aa:aa;
fixed-address 10.100.100.9;
option host-name "s8-guest";
}
Теперь он будет получать разные адреса в зависимости от того, в какой сети он находится.
Если для этой сети нет статической записи, она получит динамический адрес. Если в подсети нет свободных адресов, то ей не будет присвоен ни один адрес.
Вы просто захотите поместить его в ~/.bash_profile
, так как это то, что ваша оболочка выполняет при входе в систему; проблема :, если вы не входите в оболочку (, например. поскольку вы входите в систему с помощью графического интерфейса ), это не будет запущено.
примечание :это один из трех отдельных ответов; предполагается раздельность.
Если вы знаете, что ваш скрипт устанавливает только те вещи, которые одновременно
тогда вы можете просто "эмулировать" то, что делает скрипт :он установит несколько переменных окружения.
Итак, как сравнить, какие переменные среды были до и после запуска скрипта? diff
действительно хорошо сравнивает текстовые файлы.
Вы можете использовать set
для получения переменных окружения (после установки опции posix.
И вы можете использовать <(...)
, чтобы создать временный файл для хранения результатов set
, запущенных в подоболочке. Итак, соберите все вместе:
$ diff <(set -o posix; set) <(export FOO=BAR; set -o posix; set)
скажу тебе
33a34
> FOO=BAR
, который вы бы прочитали как «есть строка FOO=BAR
, которая есть во втором выводе, а не в первом».
Вы можете бежать
$ diff <(set -o posix; set) <(. /path/to/setup_software.sh; set -o posix; set)
, чтобы выяснить, что ваш сценарий установки изменил в среде. Вам понадобится человеческий мозг, чтобы интерпретировать это — некоторые вещи будут просто неуместны, некоторые будут иметь влияние на то, что сценарий на самом деле делает с вашей системой.
Затем вы можете добавить все измененные переменные в свой ~/.bashrc
, например.
export FOO=BAR
примечание :это один из трех отдельных ответов; предполагается раздельность.
Звучит опасно, как будто ты слишком много стараешься!Вы можете просто добавить псевдоним, который является источником сценария, а затем запускает ваше программное обеспечение :
.alias startit=". /path/to/setup_software.sh; run_software"
и затем позвоните startit
.
Если это больше, чем одна команда, возможно, вы ищете что-то вроде автоматической -активации сред, когда вы cd
заходите в определенные папки.
direnv
позволяет вам сделать это. Конечно, это не решает проблему, связанную с тем, что поиск скрипта требует времени -, но он делает это только один раз, когда вы входите в конкретный каталог, а не после для той же оболочки.
примечание :это один из трех отдельных ответов; предполагается раздельность.