여러 쉘 스크립트가 "소스" 변수를 수정하면 서로 간섭합니까?

여러 쉘 스크립트가 "소스" 변수를 수정하면 서로 간섭합니까?

병렬로 실행되는 여러 다른 스크립트에서 동일한 셸 스크립트를 가져와 소스 스크립트에 정의된 셸 변수를 수정하면,구입스크립트가 서로의 변수 값을 혼동합니까?

예:

  • source.sh
    #!/bin/bash
    
    some_value=$1+10
    
  • file-1.sh
    #!/bin/bash
    
    source ./source.sh 5
    ./some-script $some_value
    
  • file-2.sh
    #!/bin/bash
    
    source ./source.sh 10
    ./some-script.sh $some_value
    

답변1

$some_value이를 정의하는 프로세스만큼 많은 환경 또는 셸 변수가 있습니다.

그런 다음 동시에 실행하면 file-1.sh프로세스 file-2.sh가 다르기 때문에 값이 달라집니다. 이는 source프로세스를 생성하지 않으며 소스 스크립트를 프로세스 환경과 함께 file-1.sh사용할 수 있습니다 file-2.sh.

답변2

쉘 스크립트를 사용 한다는 것은 source현재 쉘 인스턴스가 스크립트를 한 줄씩 읽고 명령줄에 입력한 것처럼( source프롬프트에서 수행한 경우) 그 자리에서 명령을 실행한다는 의미입니다. 복사하여 스크립트에 붙여넣은 경우(스크립트에서 가져오는 경우)

따라서 서로 다른 쉘 스크립트에는 우연히 두 경우 모두 동일한 이름을 갖는 로컬 로 정의된 쉘 변수가 있는 것으로 file-1.sh보입니다 . 두 스크립트를 병렬로 실행하더라도 서로에 대해 아무것도 모르므로 상호 작용이 없습니다. 실행 중인 하위 쉘 은 실행 중인 하위 쉘에도 변수가 정의되어 있다는 사실을 전혀 모릅니다 .file-2.shsome_valuefile-1.shfile-2.shsome_value


참고로, 다음과 같은 산술 표현식을 만들려고 합니다.

some_value=$1+10

상상했던 효과를 얻지 못할 것입니다. 문자 그대로 양보 file-1.sh할 것이기 때문입니다 . 문자 그대로 양보 할 것이기 때문입니다 . 산술 평가를 수행하려면 다음과 같이 산술 확장에 넣어야 합니다.5+10file-2.sh10+10

some_value=$(($1+10))

쉘 스크립트를 확인하는 것이 좋습니다shellcheck, 구문(및 일부 논리) 오류를 포착하기 위해 많은 Linux 배포판에서 독립 실행형 도구로도 사용할 수 있습니다.

관련 정보