안녕하세요, bash rc에서 bash 스크립트를 실행할 수 있는지 궁금합니다. 새 쉘을 시작하지 말라고 지시하는 방법이 없으면 무한 루프를 생성하는 것 같습니다.
이것은 예이다
bash_script.sh:
#!/bin/bash
echo Hello World
.bashrc
export HELLO_WORLD=$(bash_script.sh)
답변1
스크립트는 비대화형 쉘에 의해 실행되며 .bashrc
대화형 쉘에 의해서만 자동으로 획득됩니다.
그러나 무한 루프를 트리거하는 방법이 있습니다.모든 bash
대화식이든 아니든 쉘은 변수가 BASH_ENV
설정되었는지 확인하고 설정된 경우 해당 값을 소스 파일 이름으로 사용합니다. 이 경우 bash
이 파일에서 스크립트를 실행하면 무한 루프가 발생하므로 다음과 같은 조치를 취해야 합니다. 그러나 실제로 이 스크립트(이름에서 알 수 있듯이)는 임의의 코드를 실행하는 것이 아니라 셸에서 사용하는 환경 변수를 설정하는 데만 사용됩니다.
답변2
글쎄, 나는 이것을하는 방법을 알아 냈습니다. .bashrc에서 다음을 수행하세요.
export HELLO_WORLD=$(source bash_script.sh)
답변3
귀하가 취해야 할 조치는 없습니다. 단순히 bash 스크립트를 실행한다고 해서 여러분의 스크립트 .bashrc
가 호출되는 것은 아닙니다.
.bashrc
귀하의 will은 bash가 대화형일 때만 호출됩니다 . 스크립트를 시작하면 스크립트는 대화형이 아닙니다.
Bash 매뉴얼 페이지에서:
대화식 쉘은 옵션이 아닌 인수를 취하지 않고 -c 옵션 없이 표준 입력 및 오류가 터미널(isatty(3)에 의해 결정됨)에 연결된 쉘이거나 -i 옵션으로 시작된 쉘입니다. bash가 대화형이면 PS1이 설정되고 $-에는 i가 포함되어 쉘 스크립트나 시작 파일이 이 상태를 테스트할 수 있습니다.
여기서 중요한 점은 "비옵션 인수 없이 실행"입니다. 스크립트를 시작할 때 bash의 첫 번째 인수는 스크립트 경로입니다. 따라서 옵션이 아닌 매개변수를 가지며 대화형이 아닙니다.
답변4
이 줄을 1로 만드세요:
[ -z "$PS1" ] && return # If not interactive, exit