0

我有一个 shell 脚本,我想将其转换为可以包含在.bashrc. 除了 之外#!/bin/bash,shell 脚本还包含以下函数的内容:

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结合起来。然而,shell 总是在函数被调用后退出(如果没有给出参数)。如何解决这个问题?

4

1 回答 1

6

该脚本设计为作为独立的可执行文件运行,因此在完成后退出。如果要将其用作函数,则需要删除强制执行此行为的两个元素:(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 回答