Я вручную собрал и установил новое программное обеспечение (из удаленного репозитория git). Каждый раз, когда я хочу его использовать, я запускаю что-то вроде:
. /path/to/setup_software.sh
но я хотел бы, чтобы это происходило автоматически каждый раз, когда я вхожу в свою учетную запись, а не делал это вручную. Я попытался поместить команду выше в свой .bashrc
файл, так что файл настройки будет запрашиваться каждый раз, когда я открываю свое ядро. После этого все работает нормально, и я счастлив. Моя единственная небольшая (действительно небольшая) проблема заключается в том, что он выводит некоторые сообщения журнала сразу после того, как я открываю ядро, и весь поиск занимает некоторое время (что мне не нравится :D). В любом случае, я предполагаю, что есть более изящное решение, возможно, перемещение моей папки установки в какое-то место, где файл настройки будет запускаться автоматически; любая помощь будет высоко оценена.
решение1
Размещение команды source
(или .
) в файле запуска, отличном от , .bashrc
не поможет сократить время выполнения. Вы можете разместить запуск в , /etc/profile.d
но задержка будет такой же. Что касается сообщений журнала, попробуйте это в.bashrc
. /path/to/setup_software.sh >/dev/null 2>&1
Вы не увидите сообщений журнала. Вы также не увидите никаких ошибок, которые могут возникнуть.
решение2
Вам просто нужно будет поместить его в ~/.bash_profile
, так как именно это ваша оболочка выполняет при входе в систему; проблема: если вы не входите в оболочку (например, потому что вы входите в систему с помощью графического интерфейса), то она не будет запущена.
Примечание: это один из трех отдельных ответов; эта разделенность намеренная.
решение3
Если вы знаете, что ваш сценарий устанавливает только те вещи, которыеоба
- переменные среды, а не новые функции оболочки,
- никогда не меняйтесь (например, не зависьте от времени, даты или номера версии чего-либо, что вы можете обновить),
то вы можете просто «эмулировать» то, что делает скрипт: он установит несколько переменных окружения.
Итак, как сравнить переменные среды до и после запуска вашего скрипта? 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
Примечание: это один из трех отдельных ответов; эта разделенность намеренная.
решение4
Это звучит опасно, как будто вы пытаетесь слишком много! Вы можете просто добавить псевдоним, который будет источником скрипта, а затем запустит ваше программное обеспечение:
alias startit=". /path/to/setup_software.sh; run_software"
а потом позвоните startit
.
Если это больше, чем одна команда, возможно, вы ищете что-то вроде автоматической активации сред при переходе cd
в определенные папки.
direnv
позволяет вам делать почти это. Конечно, это не решает проблему того, что получение скрипта занимает время, но это происходит только один раз, когда вы входите в определенный каталог, а не после для той же оболочки.
Примечание: это один из трех отдельных ответов; эта разделенность намеренная.