首页 > 解决方案 > Getopts 选项仅在执行函数时回显

问题描述

我正在创建一个名为“remove”的命令,它的功能基本上与 rm 命令相同,但不是实际删除文件,而是将它们存储到回收站文件夹中。

我正在研究“删除”命令的选项,并且在使用 -v 选项时遇到了一些困难。-v 选项应该具有与 rm 命令相同的功能;它会回显一条消息,指出该文件已被删除。

我的脚本如下所示:

flag=0


mainprocess(){

for filename in $*

mv $filename ~/deleted/$(basename $filename)"_"$(stat -c%i $filename)
flag=1

done

脚本的 getopts 部分如下所示

while getopts v opt
do
shift
case $opt in

v)
for file in $*
do
if [ $flag -eq 1 ] 
then
echo "The file $file has been deleted" 
fi
done
 ;;
esac

if [ $flag -eq 0 ]
then
mainprocess $*
fi

我对 -v 选项的处理方法是,一旦 mainprocess 函数运行,它将标志变量设置为 1,然后它会回显文件已被删除的消息。每当我使用 -v 选项运行命令时,“文件已被删除”消息永远不会回显。我也尝试显示标志变量的值,即使我运行 mainprocess 命令,它也始终为 0。

标签: linuxbashunix

解决方案


无需添加代码来告诉用户正在做什么,只需使用 mv 本身的 -v 选项即可。像这样的东西:

VERBOSE=
while getopts v opt
do
    shift
    case $opt in

        v) VERBOSE=-v ;;
    esac
done

for filename in $*
do
    mv $VERBOSE $filename '~/deleted/$(basename $filename)"_"$(stat -c%i $filename)'
done

推荐阅读