2013-04-27 6 views
0

.bashrc에 포함될 수있는 함수로 변환하고 싶은 쉘 스크립트가 있습니다. 그렇다 #!/bin/bash에서, 쉘 스크립트는 다음 함수의 내용으로 구성 : 그것은 이미 실행하고 고스트 스크립트로 주어진 PDF 파일을 결합.bashrc에서 쉘 스크립트를 함수로 변환 [쉘 종료]

pdfMerge() { 
    ## usage 
    if [ $# -lt 1 ]; then 
    echo "Usage: `basename $0` infile_1.pdf infile_2.pdf ... outfile.pdf" 
    exit 0 
    fi 
    ## main 
    ARGS=("[email protected]") # determine all arguments 
    outfile=${ARGS[-1]} # get the last argument 
    unset ARGS[${#ARGS[@]}-1] # drop it from the array 
    exec gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOUTPUTFILE=$outfile "${ARGS[@]}" # call gs 
} 

합니다. 그러나 쉘은 함수가 호출 된 후에 항상 종료됩니다 (인수가없는 경우에도). 이 문제를 어떻게 해결할 수 있습니까?

답변

6

스크립트는 독립 실행 형 실행 파일로 실행되도록 설계되었으므로 완료되면 종료됩니다. 당신이 함수로 사용하려는 경우, 당신은이 동작을 시행 두 요소를 제거해야합니다 exit 0gs -dBATCH ...에 전화 앞에와 exec (return로 대체) :

pdfMerge() { 
    ## usage 
    if [ $# -lt 1 ]; then 
     echo "Usage: $FUNCNAME infile_1.pdf infile_2.pdf ... outfile.pdf" 
     return 
    fi 
    ## main 
    ARGS=("[email protected]") # determine all arguments 
    outfile=${ARGS[-1]} # get the last argument 
    unset ARGS[${#ARGS[@]}-1] # drop it from the array 
    gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOUTPUTFILE=$outfile "${ARGS[@]}" # call gs 
} 
+0

안녕 NCao, 감사에 대한 거들기. 이것은 인수가없는'pdfMerge'를 호출 한 후에'if ... '뒤에있는 부분도 마찬가지로 실행된다는 점을 제외하고는 훌륭하게 작동합니다. 이것은 bash : ARGS : 나쁜 배열 첨자'bash : [0-1] : 나쁜 배열 첨자''**** 초기 장치를 열 수 없습니다, 종료 .' 어떻게 "부드럽게"후 함수를 종료 할 수 있습니다 에코? –

+0

@MariusHofert 참으로'return' 문을 잊어 버렸습니다. 대답이 업데이트되었습니다. –

+0

매우 감사합니다. 'basename $ 0'은 아마도 "pdfMerge"로 대체되어야합니다. –