내 직장에는 Centos Linux 상자가 여러 개 있습니다.
나는 그들을 위한 일종의 환경 변수 도구를 만드는 임무를 맡았습니다.
아이디어는 사용자가 프로젝트의 매개 변수(및 Pythonpath "모드")를 사용하여 도구를 실행하고 Enter 키를 누르고 a) "PROJ"
라는 새 변수를 생성하고 b) PYTHONPATH
새 폴더를 추가한다는 것입니다. 이러한 변수의 범위는 터미널 세션이 열려 있는 동안에만 지속됩니다.
제가 일했던 다른 곳에서도 이런 일이 일어나는 것을 보았습니다. 하지만 나는 그것이 무엇인지 파헤쳐 본 적이 없으며 지금은 나 자신을 걷어차고 있습니다!
나는 이것이 변수 이름을 주어진 경로로 내보내는 bash 스크립트라고 생각합니다. Python은 환경 변수를 내보내지만 유지되지 않습니다. 내보내기는 Python 스크립트의 하위 프로세스에만 적용되므로 스크립트가 끝나면 변수도 마찬가지입니다. 그래서 나는 그것이 bash 스크립트라고 결론지었습니다.
그렇다면 모든 상자에 스크립트가 포함되도록(가급적이면 사용자가 입력하지 않도록 별칭을 지정) 이 도구를 배포하는 가장 좋은 방법은 무엇입니까 source <script_location>.sh
?
둘째, 매개변수가 유효한지 확인하는 가장 좋은 방법은 무엇입니까? 올바른 프로젝트 코드가 포함된 json 파일을 생각하고 있습니다.
마지막으로 표시된 매개변수와 표시되지 않은 매개변수를 혼합할 수 있나요? 예를 들어, 사용자가 다음과 같이 입력할 수 있습니까? <tool_name> <project_title> -f
여기서 -f는 추가 선택 기능입니까? 이것을 모든 사용자의 ~/.bashrc에 배포해야 합니까?
제가 찾고 있는 내용에 대한 예가 있다면 올바른 방향을 알려주시면 매우 감사하겠습니다...
답변1
sh 파일을 생성하여 정의할 수 있습니다.기능환경이 업데이트되었습니다. 함수 이름은 "tool_name"으로 지정할 수 있습니다.
확인하다https://www.gnu.org/software/bash/manual/bashref.html#Bash-Startup-Files- 대화형 로그인 쉘이 소스 코드를 제공합니다 /etc/profile
. 시스템에서 이 파일을 확인하면 특정 디렉터리의 모든 파일을 가져오는 것과 같은 작업을 수행하는 것을 알 수 있습니다. 내 우분투 기반 시스템에서는
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
그래서 /etc/profile.d/tool_name.sh
파일은 다음과 같습니다
# create the tool function to update the environment
tool_name() {
# todo: parse options, validate arguments
export PROJ=$1
PYTHONPATH+=":$PROJ/bin"
}
사용자는 그것을 사용하기 위해 특별한 것이 필요하지 않습니다.
여러 박스에 어떻게 배포하는지 알려주는 것이 아닙니다. /etc/profile.d에 설치하려면 sudo 또는 루트 액세스가 필요합니다.
답변2
환경은 자식 프로세스에만 전달됩니다. 자식 프로세스는 부모 프로세스의 환경에 직접 영향을 미칠 수 없습니다.
사용자의 셸에서 변수를 설정하려면 셸 자체에서 설정해야 합니다. 한 가지 방법은 이러한 변수를 설정하는 스크립트를 "가져오는" 것입니다. 즉, 스크립트는 실행 중인 셸에 의해 실행됩니다.
$ source scriptname
스크립트를 호출하는 경우:
$ scriptname
그런 다음 새 셸(즉, 새 프로세스)을 시작하고 스크립트를 읽고 해당 환경에 변수를 설정합니다. 그러나 셸이 스크립트 처리를 마치면 종료되어 새로 생성된 환경이 파괴되므로 시간이 낭비됩니다.
또는 /etc/profile
쉘 함수를 정의하여 환경을 올바르게 설정할 수 있습니다. 이는 사용자가 함수를 호출할 때만 수행됩니다. 이는 실제로 쉘 함수이므로 새 쉘을 시작하는 대신 동일한 쉘에서 실행되는 명령을 호출하는 것처럼 보입니다.
스크립트 또는 함수 내에서 환경을 올바르게 설정하는 데 필요한 모든 검사를 수행할 수 있습니다.