2010-01-03 6 views
0

인자로 묶인 인수를 두 번 인용 부호로 묶어 주어진 boundries 안에 map의 shape-file을 생성합니다. bash : 큰 따옴표로 스크립트를 호출합니다.

select ENCODING in UTF8 WIN1252 WIN1255 ISO-8859-8; 
... 
select NAV_SELECT in Included Excluded; 

은 물론,이 두 문장이 입력으로 번호를 입력합니다 입력을 요구 : 스크립트 내에서
$ export_map "0 0 100 100" 

select 문이 있습니다. 이것은 스크립트에 줄 바꿈이 뒤 따르는 숫자를 파이핑하여 우회 할 수 있습니다.

시간을 절약하기 위해 ENCODING (4 개의 옵션) 및 NAV_SELECT (2 개의 옵션)의 각 조합에 대해 8 개의지도를 만드는 스크립트를 만들고 싶습니다.

내가 래퍼로서 서버에, 또 다른 bash는 스크립트, create_map를 작성했습니다

: (! 감사 Brian)

#!/bin/bash 

for nav in 1 2 3 4; 
do 
    for enc in 1 2; 
    do 
     printf "$nav\n$enc\n" | /bin/bash -c "./export_map.sh \"0 0 100 100\"" 
    done 
done 

이 **이 작동,하지만 난 숫자 인수를 가질 수있는 방법을 찾을 수 없습니다 "0 0 100 100"은 외부 스크립트 외부에서 전달됩니다. **

기본적으로 wrapper bash 스크립트에 큰 따옴표 안에 인수를 허용하고 이중 따옴표로 내부 스크립트에 전달하는 방법을 찾고 있습니다.

해명 :

export_map는, 주요 스크립트는 create_map 8 배에서 호출된다.

아이디어가 있으십니까?

감사합니다,

아담

+0

:

#!/bin/bash ./inner.bash "[email protected]" 

그리고 그것을 호출. 'select' 문으로 무엇인가를하려하지만 bash 스크립트에는 select 문이 없습니다. 다른 줄에 두개의 숫자를 출력하고,'export_map.sh' 스크립트를 호출 할 때 파이핑을합니다. 코드를 제공하지 않습니다 (이전에 언급 한'create_map '과 동일합니까?). 나는 당신의 인용 문제가 어디서 들어오고 있는지에 대해 약간은 분명하지 않다. 정확히 무엇을하려는 것인지, 정확한 문제에 대해 자세하게 조사해 볼 수 있습니까? –

+0

나는 내 대답을 분명히했다. –

답변

6

내가 제대로 문제를 이해한다면 (나는 확실히에 대한 아니에요하는, 내 의견을 참조), 당신은 아마 당신의 printf에 다른 \n를 추가해야합니다; printfecho처럼 기본적으로 후행 줄 바꿈을 추가하지 않습니다. 이렇게하면 select 명령에 의해 두 번째 값이 올바르게 읽히게됩니다. export_map.sh에 나타납니다.

printf "$nav\n$enc\n" | /bin/bash -c "./export_map.sh \"100 200 300 400\"" 

또한 /bin/bash -c과 따옴표를 추가해야한다고 생각하지 않습니다. 내가 뭔가를 누락하지 않는 한 다음은, 충분합니다 : 정화에 대한

printf "$nav\n$enc\n" | ./export_map.sh "100 200 300 400" 

편집 감사합니다. 래퍼 스크립트의 인수를 내부 스크립트로 전달하여 단일 인수로 유지하면 "$1"을 전달할 수 있습니다. 따옴표는이 인수를 하나의 인수로 그룹화하려는 것을 나타냅니다. $1은 첫 번째 매개 변수입니다. 귀하의 래퍼 스크립트. 바깥 쪽 스크립트의 모든 매개 변수를 내부 스크립트로 전달하려는 경우 각 매개 변수는 단일 매개 변수로 유지되므로 대신 "[email protected]"을 사용할 수 있습니다.

#!/bin/bash 

for nav in 1 2 3 4; 
do 
    for enc in 1 2; 
    do 
     printf "$nav\n$enc\n" | ./export_map.sh "$1" 
    done 
done 

여기에 "[email protected]"의 작동 방식에 대한 간단한 예가 나와 있습니다. 첫째, inner.bash :

#!/bin/bash 

for str in "[email protected]" 
do 
    echo $str 
done 

outer.bash : 난 당신이 여기에 무엇을하려고에 약간 불분명 해요

$ ./outer.bash "foo bar" baz "quux zot" 
foo bar 
baz 
quux zot 
+0

+1 좋은 답변입니다. 또한 트위터 이미지 인코딩 문제가 정말 마음에 들었습니다. –

+0

감사! 나는 그 도전에 많은 시간과 노력을 기울였다. 그러나 그것은 많은 재미이었다. –

관련 문제