Мне нужно запустить скрипт, когда я вхожу и выхожу из системы в моей Ubuntu.
Я пытался вставить сценарий в свой ~/.bash_login
, но он не работал.
Есть ли лучшее место, где я могу запустить свой сценарий?
Мой сценарий находится в /home/gsd/script/login.sh
и он исполняемый.
edit:
мой скрипт запускается, когда я набираю: /home/gsd/script/login.sh
и теперь он установлен с + x
, у меня только: touch /home/gsd/test.txt
в ~/.bash_login
для проверки
файл test.txt никогда не создается
редактировать 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
Если .bash_profile существует, то Bash не будет читать .bash_login (или .profile). Эта раздражающая функция описана в некоторых версиях руководства по Bash, но не во всех.
.bash_profile
и .bash_login
аналогичны, поэтому я рекомендую вам поместить ваши команды в .bash_profile
, потому что они обычно используются и .bash_login
относительно неизвестны. Также рассмотрите возможность размещения ваших команд в .bashrc
вместо .bash_profile
. В руководстве описывается различие между «интерактивной оболочкой без входа в систему» и «интерактивной оболочкой входа в систему», поэтому обязательно прочитайте этот раздел.
Справочное руководство по GNU Bash версии 4.1: файлы запуска Bash говорит:
ищет ~ / .bash_profile, ~ / .bash_login и ~ / .profile в этот порядок, а также читает и выполняет команды из первой из существующих и доступных для чтения.
blockquote>Также см. этот вопрос о суперпользователе и это Bash howto (Не останавливайтесь по адресу freeunix.dyndns.org:8088 --- это все еще руководство хорошего качества, и я использовал его в течение многих лет).
Обновление , поскольку вы говорите, что у вас нет .bash_profile.
Похоже, вы не используете так называемую «интерактивную оболочку без авторизации» (подробное описание см. В руководстве по Bash).
Чтобы проверить это, добавьте что-то вроде следующего в каждом файле:
.bashrc
,.bash_profile
и.bash_login
.echo "DEBUG: I am .bashrc" echo "DEBUG: I am .bash_profile"
Затем выйдите и войдите снова. Когда вы входите в систему, я уверен, что вы увидите только фразу «DEBUG: я .bashrc», но не «Я .bash_profile». Если это так, это означает, что вы являетесь «интерактивной оболочкой без регистрации», что просто означает, что Bash будет вызывать
.bashrc
, но не.bash_profile
. Для получения информации о том, почему эти точечные файлы являются такими, как они есть, см. Пост @Andrejs Cainikovs ниже и http://mywiki.wooledge.org/DotFiles
Оболочки входа в систему, независимо от того, если они - интерактивное или неинтерактивное чтение и выполняются .profile
Интерактивное чтение оболочек и выполняется .bashrc
.
Часто Вы будете видеть это /etc/profile
источники .bashrc
- таким образом все настройки, установленные в .bashrc
также вступит в силу в оболочке входа в систему независимо от того, является ли это интерактивным или неинтерактивным.
Порядок выполнения сценариев инициализации для оболочки зависит от того, если оболочка является интерактивной или неинтерактивной и не связанной с тем, если это - сценарий входа в систему или нет.
Когда удар вызывается как интерактивная оболочка входа в систему, он читает и выполняет команды от /etc/profile
. Затем Bash затем попробует для выполнения, ТОЛЬКО первый файл существует и читаем из следующего:
.bash_profile
.bash_login
.profile
Если один из этих файлов будет найден, но не сможет быть считан, то он вызовет ошибку. Нет никакой ошибки, если кто-либо НЕ найден.
Этот тот же процесс сопровождается, когда неинтерактивная оболочка входа в систему вызывается с --login
опция.
Bash ищет файлы .bash_login
или .profile
только в том случае, если он выполнен в виде интерактивной оболочки входа. Когда он выполняется как интерактивная оболочка без входа в систему, он читает .bashrc
.
Обычно это второй случай, т. Е. Когда вы запускаете gnome-terminal
, bash запускается как не входящая в систему оболочка.
Это ясно говорит о том, что если вы загружаетесь в Gnome, .bash_login
не будет выполнен. Но если вы снизите уровень запуска для загрузки непосредственно в bash, тот же файл будет выполнен при успешном входе в систему.
Я предполагаю, что .bash_login
будет выполняться и в случае удаленных SSH-соединений.
Частично разорван из здесь .
Убедитесь, что скрипт, который вы хотите запустить, является исполняемым. Запустите chmod +x scriptname
, чтобы сделать это. Также убедитесь, что сценарий начинается с правильного шебанга (#!/bin/bash
для сценариев оболочки). Наконец, используйте все полные пути при его выполнении, например, /usr/bin/echo
вместо echo
, только если среда, в которой будет выполняться ваш скрипт, не идентична той, к которой вы привыкли.