Как сделать так, чтобы локально установленное программное обеспечение автоматически загружалось при входе в учетную запись?

Как сделать так, чтобы локально установленное программное обеспечение автоматически загружалось при входе в учетную запись?

Я вручную собрал и установил новое программное обеспечение (из удаленного репозитория 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

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

  1. переменные среды, а не новые функции оболочки,
  2. никогда не меняйтесь (например, не зависьте от времени, даты или номера версии чего-либо, что вы можете обновить),

то вы можете просто «эмулировать» то, что делает скрипт: он установит несколько переменных окружения.

Итак, как сравнить переменные среды до и после запуска вашего скрипта? 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позволяет вам делать почти это. Конечно, это не решает проблему того, что получение скрипта занимает время, но это происходит только один раз, когда вы входите в определенный каталог, а не после для той же оболочки.

Примечание: это один из трех отдельных ответов; эта разделенность намеренная.

Связанный контент