2012-11-05 2 views
2

나는 뭔가를하고 makefile에 결과를 되돌려주는 쉘 스크립트를 호출하고 싶은 곳에서 makefile을 가지고있다.쉘 스크립트의 인수를 makefile에서 전달하고 결과를 다시 얻으려고합니까?

자세한 설명 : - 다음과 같이

내 메이크업 파일에서

, 나는 쉘 스크립트를 호출 -

source = $(PWD) 
target = $(ROOT) 
SCRIPT:= /home/........./temp.sh 
FUNCTION:=$(shell $(SCRIPT $source $target))` 

쉘 스크립트 "temp.sh"-

source=$1 
target=$2 

echo There are $# arguments to $0: $* 
common_part=$source # for now 
result="" # for now 

while [[ "${target#$common_part}" == "${target}" ]]; do 
    common_part="$(dirname $common_part)" 

    if [[ -z $result ]]; then 
     result=".." 
    else 
     result="../$result" 
    fi 
done 

if [[ $common_part == "/" ]]; then 
    result="$result/" 
fi 

forward_part="${target#$common_part}" 

if [[ -n $result ]] && [[ -n $forward_part ]]; then 
    result="$result$forward_part" 
elif [[ -n $forward_part ]]; then 
    result="${forward_part:1}" 
fi 

echo "Result=$result" 
나는 동일한의 이유가 될 수있는 것을 쉘 스크립트의 "에코 문을"보이지 않는
  • ?
  • 결과를 어떻게 makefile로 되돌릴 수 있습니까?
  • 이 메이크업 파일에서 스크립트를 호출 할 수있는 권리 방법이 있나요?

나는이 지역에서 초보자입니다.

답변

2

귀하의 호출 구문이 잘못되었습니다; 당신이 원하는

FUNCTION:=$(shell $(SCRIPT) $(source) $(target)) 

보간 된 메이크 파일 변수는 단일 문자가 아닌 한 이름 주위에 괄호가 있어야합니다.

+0

답변 해 주셔서 감사합니다. 위 명령을 실행하면 다음 오류가 발생합니다. temp.sh : 명령을 찾을 수 없습니다. temp.sh가 현재 디렉토리에 있습니다. 나는 alos가 ./temp.sh에 scipt 값을 시도했지만 여전히 같은 오류가 발생합니다. 아직도 뭔가 빠졌나요? 내가 틀린 곳이면 어디든지 교정하십시오. – user1799483

+0

이 컨텍스트에서 알 수 없습니다. 어쩌면 더 구체적인 세부 사항과 함께 별도의 질문을 게시 할 수 있습니다. – tripleee

+0

makefile에서 각 스크립트는 subshell에서 실행됩니다. 볼 수 있듯이 'shell'은 스크립트를 실행하기 전에 사용됩니다. 그래서 작업 디렉토리에 'cd'하고 스크립트를 실행하는 것이 좋습니다. 예. $ (쉘 CD를 $ (WORKING_DIR) ./$(SCRIPT_name) $ (소스) $ (대상)) 당신이 다음 스크립트를 실행하기 전에에 PWD 할 수있는 디렉토리 알고 싶다면 – Omkar

관련 문제