Опция Getopts для отображения только тогда, когда функция была выполнена - PullRequest
0 голосов
/ 27 декабря 2018

Я создаю команду под названием «удалить», которая в основном работает так же, как команда 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, сообщение «файл был удален» никогда не отображается.я попытался отобразить значение переменной flag, а оно всегда было равно 0, даже если я запускаю команду mainprocess.

1 Ответ

0 голосов
/ 27 декабря 2018

Вместо добавления кода, чтобы сообщить пользователю, что делается, просто используйте параметр -v самого mv.Как то так:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...