Сценарий не может найти модуль Perl, но модуль существует в локальном подкаталоге

Вероятно, как вы подозревали, просто незначительное изменение, чтобы исправить, попробуйте вместо этого:

if [[ !  -z  "$image"  ]]; then

Объяснение

Предположим, что при совпадении exiftool и grep переменная $ image содержит следующее:

abcabcabc

Но при отсутствии выходных данных $ image содержит: (ничего)

В тестовом состоянии:

if [[ !  -z  "$image// }"  ]]; then

Итак, в первом случае bash видит это:

if [[ !  -z  "abcabcabc// }"  ]]; then

Но во втором случае bash видит это:

if [[ !  -z  "// }"  ]]; then

Тест говорит , если «//} »НЕ равно нулю, то... однако «//} » всегда не будет нулевым значением, это что-то, это последовательность, состоящая из двух косых черт космоса и фигурной скобки. Так как там что-то есть, что-то не нулевое значение, вот почему то часть запускается, даже когда у вас нет совпадений в $ image . Таким образом, удаление этого //} должно работать.

-121--95053-

Другой вариант:

if [[ -n "$image" ]]; then

, чтобы проверить, содержит ли переменная $ image нечто, а не ! -z...

-121--95054-

Содержат ли файлы .7z более одного экземпляра одного и того же имени файла? Я полагаю, что нет, потому что вы mv-ing их всех в тот же каталог «$ dest».

В этом случае лучше использовать команду mv вне цикла, частично потому, что будет выполняться только одна команда mv total (а не одна команда mv на файл .7z), но в основном потому, что вероятнее всего будет хотя бы один файл, соответствующий вашему образцу. И вы можете сохранить двойные кавычки вокруг переменных, что гораздо безопаснее, если в них есть имена файлов со значимыми символами оболочки или глобуса.

Если для одной команды mv извлечено слишком много файлов, можно использовать find , что-то подобное:

find "$extractDir" -name "$FILEMASK.xml" -exec mv {} "$dest/" +

Лучше всего использовать find в любом случае - вы никогда не знаете заранее, сколько файлов будет извлечено, и это полезно защитное программирование. Он также имеет преимущество в том, что не делает точно ничего, если не найдено соответствующих файлов, так что mv не будет жаловаться на отсутствующие файлы.

1
24.02.2018, 12:06
1 ответ

El módulo existe en /home/pi/warcarrier/liby el script intenta cargarlo como lib/GMAPS.pm.

Esto significa que el uso de -I /home/pi/warcarrier/libhará que Perl busque /home/pi/warcarrier/lib/lib/GMAPS.pm.

Use -I /home/pi/warcarrieren su lugar.

2
27.01.2020, 23:32

Теги

Похожие вопросы