내 계정에 로그인할 때 로컬에 설치된 소프트웨어가 자동으로 제공되도록 하려면 어떻게 해야 합니까?

내 계정에 로그인할 때 로컬에 설치된 소프트웨어가 자동으로 제공되도록 하려면 어떻게 해야 합니까?

원격 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텍스트 파일을 비교하는 데 정말 좋습니다.

setposix 옵션을 설정한 후 환경 변수를 제공하는 데 사용할 수 있습니다 .

그리고 서브셸에서 실행 <(...)결과를 보관할 임시 파일을 만드는 데 사용할 수 있습니다 . 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당신이 꽤 많은 일을 할 수있게 해줍니다. 물론 스크립트를 소싱하는 데 시간이 걸리는 문제는 해결되지 않습니다. 하지만 특정 디렉터리에 들어갈 때 한 번만 수행되고 동일한 셸 이후에는 수행되지 않습니다.

참고: 이것은 세 가지 답변 중 하나입니다. 분리가 의도되었습니다.

관련 정보