Не нужно возиться с kde. Ваша проблема — уведомление о сбое, просто отключите его. Щелкните правой кнопкой мыши значок уведомлений > Настроить уведомления и действия о событиях > Щелкните "Настроить" в разделе "Приложения" > выберите "Рабочее пространство Plasma" > щелкните "Настроить события" > В данном списке выберите "Сбой приложения" > "Отключить" флажок "Показывать сообщение во всплывающем окне".
В этом коде есть некоторые недостатки.
ls
. И поскольку у вас есть подстановка команд, каждый результат передается в INV
как одна строка. Вместо этого вы можете просто перебрать результаты глобуса:for inv in np4178/*pdf; do
Вам не нужны никакие ;
или \
в этом коде. На самом деле то, как они написаны, на самом деле компенсируют друг друга. ;
— это разделитель новой строки, а \
— escape-символ, который при использовании в конце строки экранирует новую строку.
echo (обычно )не интерпретирует символы обратной косой черты (\n
), можно использовать echo -e
, но printf лучше, чем echo
Как вы уже обнаружили, ваша тестовая конструкция проверяет, является ли переменная нулевой, тогда как вы, по-видимому, хотите проверить, не является ли она нулевой
Для этого нет абсолютно никакой причины ${INVNUMB+x}
.
Вот как может выглядеть нужный вам код:
for inv in np4178/*pdf; do
invnumb="$(pdfgrep -ho 'IN[0-9]{6,6}' "$inv")"
if [[ -n "$invnumb" ]]; then
printf '\n%s\n' "$invnumb"
else
printf '\n%s\n' "IN000000"
fi
done
Спасибо за помощь. Это было очень полезно. Очевидно, что пример, который я привел, не был полным сценарием. И я не понимал значения включения переменных env в ""
, поэтому выучил урок. И это была первая попытка понять проблему с моей стороны, поэтому я был несколько сбит с толку тем, чего именно я пытался достичь.
Я разместил это как ответ, чтобы получить правильное форматирование кода. Далее следует более или менее то, к чему я пришел:
for INV in $(ls -1 $SRCDIR/HP3000-INV*pdf)
# search files for IN###### and return only first occurrence of match
do INVNUMB="$(pdfgrep -h -o -m 1 'IN[0-9]{6,6}' $INV)"
if [[ -n ${INVNUMB} ]]; \
then
# prepend the invoice number to the file name
# and move renamed file to xfr directory
mv -f $INV $(dirname $INV)"/"$TODAY"/"$INVNUMB"-"$(basename $INV)
fi
done