~ / .bash_login을 사용하여 로그인시 스크립트를 실행하십시오.


15

우분투에서 로그인하고 로그 아웃 할 때 스크립트를 실행해야합니다.

스크립트를 넣으려고했지만 ~/.bash_login작동하지 않았습니다.

스크립트를 실행할 수있는 더 좋은 위치가 있습니까?

내 스크립트가 있으며 /home/gsd/script/login.sh실행 파일입니다.

편집하다:

내가 입력하면 내 스크립트가 실행 /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_login에 올바른 권한이 있습니까? ls -l .bash_login은 무엇을 반환합니까?
santiagozky

당신은 또한 ~/.bash_profile있습니까?
enzotib

-rw-r--r-- 1 gsd gsd 313 2012-01-22 11:56 .bash_login
Gino Sullivan

1
chmod +x .bash_login
Zoke

1
chmod +x .bash_login.bash_login에서 실행 가능 비트를 설정할 필요는 없습니다 . Bash 매뉴얼은이 영역에서 약간 혼란 스럽지만 Bash는 쉘 스크립트와 같이 .bash_login을 eXecute하지 않습니다. 파일을 읽은 다음 파일 내에서 명령을 실행합니다 (을 실행하여 비슷한 작업을 수행 할 수 있음 source ~/.bash_login).
Stefan Lasiewski

답변:


20

.bash_profile이 있으면 Bash는 .bash_login (또는 .profile)을 읽지 않습니다. 이 성가신 기능은 일부 버전의 Bash 매뉴얼에 설명되어 있지만 전부는 아닙니다.

.bash_profile그리고 .bash_login유사 .bash_profile하기 때문에 일반적으로 사용되며 .bash_login비교적 알 수 없으므로 명령을에 넣는 것이 좋습니다 . 또한 .bashrc대신 명령을 입력 하는 것을 고려하십시오 .bash_profile. 이 매뉴얼은 "비 대화식 비 로그인 쉘"과 "대화식 로그인 쉘"의 차이점을 설명하므로 해당 섹션을 읽으십시오.

GNU Bash Reference Manual 버전 4.1 : Bash Startup Files 는 다음과 같이 말합니다.

~ / .bash_profile, ~ / .bash_login 및 ~ / .profile을 순서대로 찾고 존재 하고 읽을 수있는 첫 번째 명령을 읽고 실행합니다 .

또한 참조 수퍼 유저에이 질문을 하고, 이 배쉬 하우투는 (DO가 freeunix.dyndns.org:8088 주소로 저지 할 수 없습니다 --- 여전히 좋은 품질 매뉴얼 그리고 나는 몇 년 동안 그것을 사용했습니다).

.bash_profile이 없다고 말했기 때문에 Update .

"대화식 비 로그인 셸"을 사용하지 않는 것 같습니다 (자세한 설명은 Bash 설명서를 참조하십시오).

이를 테스트하려면 다음과 같은 각 파일을 추가하십시오. .bashrc, .bash_profile.bash_login.

echo "DEBUG: I am .bashrc"

echo "DEBUG: I am .bash_profile"

그런 다음 로그 아웃했다가 다시 로그인하십시오. 로그인하면 "DEBUG : I am .bashrc"라는 문구 만 표시되고 "I am .bash_profile"문구는 표시되지 않습니다. 그렇다면 "대화식 비 로그인 셸"을 의미합니다. 이는 단순히 Bash가 호출 .bashrc하지만 호출 하지 않음을 의미합니다 .bash_profile. 이러한 도트 파일이 왜 그런지에 대한 정보는 아래의 @Andrejs Cainikovs의 게시물과 http://mywiki.wooledge.org/DotFiles를 참조하십시오 .


내 질문을 업데이트했는데 bash_profile이 없습니다
Gino Sullivan

네, 이전에 "예. bash 프로파일이 있습니다"라고 말했기 때문입니다.
Stefan Lasiewski

예, 그것은 다음하지만 동일한 결과를 제거했다
지노 설리반

3
이 답변은 문제를 해결합니다. 받아 들일만한 가치가 있다고 생각합니다.
Marius Butuc

1
또한이 bash 파일은 GUI에 로그인 할 때가 아니라 쉘, 터미널, ssh 등을 통해 로그인 할 때만 실행됩니다!
mivk

6

대화식 또는 비 대화식 읽기 및 실행 여부에 관계없이 로그인 쉘.profile

대화식 쉘은 읽고 실행 .bashrc합니다.

종종 /etc/profile소스 를 볼 수 있습니다 .bashrc. 따라서 모든 설정 .bashrc은 대화식인지 비 대화식인지에 관계없이 로그인 셸에서도 적용됩니다.

쉘의 초기화 스크립트 실행 순서는 쉘이 대화식인지 비 대화식인지 여부와 로그인 스크립트인지 여부에 따라 다릅니다.

bash가 대화식 로그인 쉘로 호출되면 bash는 명령을 읽고 실행합니다 /etc/profile. 그런 다음 Bash는 첫 번째 파일 만 존재하며 다음을 읽을 수 있도록 실행하려고 시도합니다.

  1. .bash_profile
  2. .bash_login
  3. .profile

이러한 파일 중 하나를 찾았지만 읽을 수없는 경우 오류가 발생합니다. 어떤 경우에는 오류가 없다 NOT 발견은.

--login옵션 으로 비 대화식 로그인 셸을 호출 할 때도 이와 동일한 프로세스가 수행됩니다 .


1
AFAIK, .profile파일은 사용자가 그래픽 인터페이스를 사용하여 로그인 할 때만 읽고 실행됩니다. 그렇지 않으면 읽을 수 없습니다.
RajaRaviVarma

@RajaRaviVarma 방금 테스트 한 (Ubuntu 16.04) ~/.profile그래픽이 아닌 로그인 셸에서 확실히 읽습니다 (다른 터미널로 전환 Ctrl+Alt+F2하고 로그인 하여 테스트했습니다 ).
waldyrious

@RajaRaviVarma에 동의합니다. SSH를 통해 Ubuntu 16.04 VM에 로그인하고 있으며 .profile읽기 전용이 아닙니다..bashrc
jamesc

0

실행하려는 스크립트가 실행 가능한지 확인하십시오. 실행 chmod +x scriptname그렇게 할 수 있습니다. 또한 스크립트가 올바른 shebang으로 시작하는지 확인하십시오 ( #!/bin/bash쉘 스크립트의 경우). 예를 들어, 그것을 실행할 때 마지막으로, 모든 전체 경로를 사용하는 /usr/bin/echo대신 echo에 실행할 스크립트가 당신이 사용하는 것과 동일하지 않은 것을 그냥 넣다 환경.


0

Bash 는 대화식 로그인 쉘로 실행되는 경우 .bash_login또는 .profile파일 만 찾습니다 . 대화 형 비 로그인 셸로 실행될 때 읽습니다 .bashrc.
일반적으로 두 번째 경우입니다. 즉, gnome-terminalbash를 실행할 때 비 로그인 셸로 실행됩니다.

이것은 Gnome으로 부팅하면 .bash_login실행되지 않는다는 것을 분명히 나타냅니다 . 그러나 런레벨을 낮추어 bash로 직접 부팅하면 성공적으로 로그인하면 동일한 파일이 실행됩니다. 원격 SSH 연결의 경우에도 실행될
것이라고 가정 .bash_login합니다.

여기 에서 부분적으로 찢어졌습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.