Мне нужно запустить скрипт, когда я вхожу в систему и выхожу из системы в своем Ubuntu.
Я попытался поместить скрипт в свой ~/.bash_login
, но он не сработал.
Есть ли лучшее место, где я могу запустить мой скрипт?
Мой скрипт находится в /home/gsd/script/login.sh
, и он является исполняемым.
edit:
мой скрипт запускается когда я набираю: /home/gsd/script/login.sh
, и теперь он установлен с + x
, у меня есть только: touch /home/gsd/test.txt
в ~/.bash_login
.
файл test.txt никогда не создавался
edit 2:
gsd@laptop:~$ ll ~/.bash*
-rw------- 1 gsd gsd 38639 2012-01-25 17:25 .bash_history
-rw-r--r-- 1 gsd gsd 29 2012-01-25 15:22 .bash_login
-rw-r--r-- 1 gsd gsd 220 2011-11-03 19:22 .bash_logout
-rw-r--r-- 1 gsd gsd 3136 2011-11-04 08:00 .bashrc
Убедитесь, что скрипт, который вы хотите запустить, является исполняемым. Для этого запустите chmod +x scriptname
. Также убедитесь, что скрипт начинается с правильного shebang (#!/bin/bash
для сценариев оболочки). Наконец, используйте все полные пути при выполнении этого, например, /usr/bin/echo
вместо echo
, просто отключите среду, в которой будет выполняться ваш скрипт, не идентична той, к которой вы привыкли.
Локальные оболочки, независимо от того, являются ли они интерактивными или неинтерактивными, читают и исполняют .profile
Интерактивные оболочки читают и исполняют .bashrc
.
Часто вы увидите что /etc/profile
sources .bashrc
- таким образом, все настройки, сделанные в .bashrc
, также вступят в силу в оболочке входа, независимо от того, является ли она интерактивной или неинтерактивной.
Порядок выполнения инициализации скрипты для оболочки зависят от того, является ли оболочка интерактивной или неинтерактивной и не связана с ней, если она является сценарием входа в систему или нет.
Когда bash вызывается как интерактивная оболочка входа, он считывает и выполняет команды из /etc/profile
. Затем Bash попытается выполнить ТОЛЬКО первый файл существует и читается следующим образом:
.bash_profile
.bash_login
.profile
Если один из этих файлов найден, но не может быть прочитан, это вызовет ошибку. Нет ошибки, если они НЕ найдены.
Этот же процесс выполняется, когда неинтерактивная оболочка входа вызывается с опцией --login
.