Структурная ошибка в моем сценарии bash: невозможно правильно отобразить список файлов в каталоге с использованием подстановочных знаков - PullRequest
0 голосов
/ 29 апреля 2018

Я сделаю это кратким и пренебрегу некоторыми конкретными деталями реализации. Вот начальный код, и он имеет три случая: 1. Нет аргумента, считывается из пользовательского ввода 2. Два аргумента 3. Ошибка:

path="$(pwd)"
TIME_OUT="2s"
matchfile=""
reference=""
# CASE 1 : if no parameter, read from user input
if [ $# -eq 0 ]; then
# User input(detail neglected) gives the value of array[i], matchfile is test__xx
# reference is ex_xx, same as the following situation
    matchfile="test_${array[i]}"
    reference="ex_${ref}"

#if there are two parameters, matchfile is test__xx
# reference is ex_xx
# CASE 2:
elif [ $# -eq 2 ] && [ -n "$1" ] && [ -d "$2" ]; then
matchfile="test_$1"
reference="ex_$1"
#exit in other cases
#CASE 3:
else
  exit 1
fi 

Вот часть, где я перечисляю файлы в каталоге и нахожу файл с таким же шаблоном:

set -x
echo "$path"
ls "$path"/testcases
for Y in "$path"/testcases/* ; do
  echo " Original Ref: $Y"
  if [ "$Y" == "${path}/testcases/$reference" ]; then
    ref_file="$Y"
    break

  fi
done
exit 1

Теперь в случае 2 код file_listing выдаст правильное сообщение, например:

+ echo DIR
+ ls DIR/testcases
++ pwd
+ for Y in '"$path"/testcases/*'
+ ls DIR/testcases/2.txt
+ echo 'the directory is DIR/testcases/2.txt'
++ pwd
+ echo ' Original Ref: DIR/testcases/2.txt'
+ '[' DIR/testcases/2.txt == DIR/testcases/ex_SOMEFILE2 ']'
+ for Y in '"$path"/testcases/*'
+ ls DIR/testcases/ex_SOMEFILE2
+ echo 'the directory is DIR/testcases/ex_SOMEFILE2'
++ pwd
+ find DIR/testcases -type f -exec chmod a+rwx '{}' ';'
+ echo ' Original Ref: DIR/testcases/ex_SOMEFILE2'
+ '[' DIR/testcases/ex_SOMEFILE2 == DIR/testcases/ex_SOMEFILE2 ']'
+ ref_file=DIR/testcases/ex_SOMEFILE2
+ break
+ exit 1

В случае 1 сообщение file_listing становится одной строкой:

+ echo DIR
+ ls DIR/testcases
++ pwd
+ for Y in '"$path"/testcases/*'
+ ls 'DIR/testcases/*'
ls: cannot access DIR/testcases/*: No such file or directory
+ echo 'the directory is DIR/testcases/*'
++ pwd
+ echo ' Original Ref: DIR/testcases/*'
+ '[' 'DIR/testcases/*' == DIR/testcases/ex_SOMEFILE2 ']'
+ exit 1

Это означает, что подстановочный знак не работает, но я действительно не знаю, почему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...