원격 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
스크립트가 다음만 설정한다는 것을 알고 있다면둘 다
- 새로운 쉘 함수가 아닌 환경 변수
- 절대 변경하지 마세요(예: 업데이트할 수 있는 항목의 시간, 날짜 또는 버전 번호에 의존하지 않음).
그런 다음 스크립트가 수행하는 작업을 간단히 "에뮬레이트"할 수 있습니다. 일부 환경 변수가 설정됩니다.
그렇다면 스크립트 실행 전과 후의 환경 변수를 어떻게 비교합니까? 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
거의 그렇게 할 수 있습니다. 물론 스크립트를 실행하는 데 시간이 걸리는 문제는 해결되지 않습니다. 그러나 동일한 셸 이후에는 한 번이 아니라 특정 디렉터리에 들어갈 때 한 번만 실행됩니다.
참고: 이는 세 가지 개별 답변 중 하나입니다. 분리는 의도적인 것입니다.