0

に含めることができる関数に変換したいシェルスクリプトがあります.bashrc。とは別に#!/bin/bash、シェル スクリプトは次の関数の内容で構成されます。

pdfMerge () {
    ## usage
    if [ $# -lt 1 ]; then
    echo "Usage: `basename $0` infile_1.pdf infile_2.pdf ... outfile.pdf"
    exit 0
    fi
    ## main
    ARGS=("$@") # 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
}

既に実行されており、指定された pdf ファイルと Ghostscript を組み合わせています。ただし、関数が呼び出された後は、シェルは常に終了します (引数が指定されていない場合も同様です)。これはどのように修正できますか?

4

1 に答える 1

6

このスクリプトは、スタンドアロンの実行可能ファイルとして実行するように設計されているため、終了すると終了します。関数として使用する場合は、この動作を強制する 2 つの要素を削除する必要があります: exit 0( に置き換えますreturn) とexecへの呼び出しの前gs -dBATCH ...:

pdfMerge () {
    ## usage
    if [ $# -lt 1 ]; then
        echo "Usage: $FUNCNAME infile_1.pdf infile_2.pdf ... outfile.pdf"
        return
    fi
    ## main
    ARGS=("$@") # 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
}
于 2013-04-27T08:47:54.607 に答える