Файлы, имена которых украшены UUID и расширением 'dtapart', как это, скорее всего, являются частично загруженными файлами, сгенерированными менеджером загрузки DownThemAll . Если это так, причина, по которой он не может быть вызван должным образом, заключается в том, что это была незавершенная загрузка.
Вы можете либо завершить загрузку, либо удалить ее и перезапустить загрузку с самого начала и убедиться, что она полностью завершена, прежде чем запускать ее, как раньше.
$2
всегда будет только вторым аргументом. $@
— это массив всех аргументов, поэтому, если вам нужно второе до конца, вы можете сделать:
... | mailx -s "MS_CASE_ST*.csv file contains data. Please research" "${@:2}"
:2
указывает смещение в расширении параметра при расширении массива $@
Для поддержки нескольких получателей с этим конкретным скриптом используйте $1
в качестве элемента пути, а затем уберите его из списка позиционных параметров. Теперь список $@
содержит только получателей.
#!/bin/bash
dir=$1
shift
shopt -s nullglob
for file in "/usr/app/tst/$dir/MS_CASE_ST"*.csv; do
uuencode "$file" "$( basename "$file" )" # or uuencode "$file" "${file##*/}"
done | mailx -s 'MS_CASE_ST*.csv file(s) contains data. Please Research' "$@"
Несколько замечаний:
Будьте осторожны и используйте двойные кавычки для любых расширений переменных, иначе у вас возникнут проблемы, когда имя пути содержит пробелы или подстановочные символы имени файла и т. д. (и статические строки с одинарными кавычками ).
Заключение $@
как "$@"
гарантирует, что оно расширяется до отдельных элементов в кавычках.
Установив параметр оболочки nullglob
в bash
, мы гарантируем, что шаблон подстановки, который использует цикл, расширяется до ничего , если он не соответствует ни одному существующему имени пути.
Этот вопрос, кажется, путает аргументы оболочки с командой read
. Они разные:
Оболочка:
set -- foo bar baz buzz zap bang ; echo $2
Выводится только второе слово:
bar
Команда read
с двумя именами переменных:
echo foo bar baz buzz zap bang | (read x y ; echo $y )
Выводит все, включая второе слово и дальше:
bar baz buzz zap bang