无法从函数内部访问命令行参数

时间:2017-01-09 22:35:00

标签: bash function

即使我的退出状态为0

,我的脚本似乎也无法正常工作

直到我使用

创建了一个函数
makedrivetree ()
{
}

语法。

如果删除它并在whiledone之间保持一致,则可以正常工作。

我将它保存在我的〜/ bin文件夹中作为makedrivetree

这是完整的功能:

#!/usr/bin/env bash

# a script to write the contents of a directory in tree form and save it to a .txt file

### CONSTANTS

DATE="$(date +%Y%m%d)"

### FUNCTIONS

makedrivetree ()

{
    while [ "${*}" != "" ] ; do

        #set $DRIVE as the first arugment sent to script
        DRIVE="${1}"
        #set $OUTPUT
        OUTPUT="/Users/$USER/Desktop/$(basename "${DRIVE}")_contents_"${DATE}".txt"
        #run tree
        tree -I "*.dpx" --si --du -U -o "${OUTPUT}" "${DRIVE}"

        #check $? for errors
        if [ "$?" -eq "0" ] ; then
            echo 'done. moving to next drive.'
        else
            echo 'error'
        fi

        shift

    done
}

#call the function(s)

makedrivetree

echo 'makedrivetree exited with status' $?

exit

2 个答案:

答案 0 :(得分:2)

您没有向该函数传递任何参数。查看函数

中的第一行代码
while [ "${*}" != "" ]  

你在那里做了什么测试是否有任何参数传递给函数。当你调用函数(makederivetree)时,你没有传递任何参数。总结一切,当你调用你的函数时,while循环从不运行,因为你指定的条件。

答案 1 :(得分:0)

makedrivetree "$@"调用函数解决了这个问题。

(评论中的优秀提示/解释/答案)