두 개의 스크립트가 있습니다. s1.sh와 s2.sh라고 가정하겠습니다.
s1의 코드는 다음과 같습니다.
step = 0
.
.(omitted)
.
if [ $step -eq 19 ]; then
./s2.sh
s2의 코드는 다음과 같습니다.
step=0
.
. (many codes here, but omitted)
.
if [ $step -eq 18 ]; then
print "hello"
19단계부터 s1을 실행하고 s1이 s2를 호출하므로 s2도 19단계로 직접 이동하기를 원합니다.
이전에 사람들이 이에 대해 이야기하는 것을 들은 적이 있지만 구체적인 방법은 기억나지 않습니다. 이를 수행하는 명령 코드는 다음과 같습니다.
./s1.sh --step 19 [some code?]--step 18
위의 두 스크립트에 인수를 전달할 수 있는 명령줄을 작성하는 방법을 아시나요?
답변1
step
둘 다 동일하게 하려면 export step
s1에서 실행하십시오. 이렇게 하면 step
변수를 호출할 때 명시적으로 전달하지 않고도 변수가 s2에 나타납니다.
step
s2에 s1과 다른 값을 설정 하려면 step=whatever
s2를 호출하기 전에 해당 값을 추가하세요. 예를 들어, s2에서 8을 만들려면 다음을 수행합니다 step=8 ./s2.sh
.
답변2
이 결과를 얻는 한 가지 방법은 위치 매개변수를 사용하는 것입니다.
이것은 test1.sh 스크립트입니다:
#!/bin/bash
step=$1
step2=$2
if [[ step -eq 19 ]]; then
./test2.sh $step2
fi
및 test2.sh 스크립트:
#!/bin/bash
step=$1
if [[ step -eq 18 ]]; then
echo "success - step 18 executed"
fi
그런 다음 test1.sh(귀하의 경우 s1.sh)를 다음과 같이 호출할 수 있습니다.
./test1.sh 19 18
그러면 성공 메시지를 받게 됩니다. 이렇게 하려면 원본 스크립트를 일부 편집해야 하지만 많은 유연성을 제공하고 두 스크립트를 훨씬 간단하게 확장할 수 있습니다. 이 접근 방식을 사용하기로 결정했다면 단계 및 2단계 변수에 대한 기본값을 설정하는 것이 좋습니다.