병렬로 실행되는 여러 다른 스크립트에서 동일한 셸 스크립트를 가져와 소스 스크립트에 정의된 셸 변수를 수정하면,구입스크립트가 서로의 변수 값을 혼동합니까?
예:
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.sh
some_value
file-1.sh
file-2.sh
some_value
참고로, 다음과 같은 산술 표현식을 만들려고 합니다.
some_value=$1+10
상상했던 효과를 얻지 못할 것입니다. 문자 그대로 양보 file-1.sh
할 것이기 때문입니다 . 문자 그대로 양보 할 것이기 때문입니다 . 산술 평가를 수행하려면 다음과 같이 산술 확장에 넣어야 합니다.5+10
file-2.sh
10+10
some_value=$(($1+10))
쉘 스크립트를 확인하는 것이 좋습니다shellcheck
, 구문(및 일부 논리) 오류를 포착하기 위해 많은 Linux 배포판에서 독립 실행형 도구로도 사용할 수 있습니다.