не используйте для
для итерации по строки файла используйте
, а IFS = read -r line; делать ...; done
вам вообще не нужно направлять вывод ls
в файл, особенно , используя -F
[[x == y]]
для сравнения шаблонов, и шаблон находится справа: #!/bin/bash
cd /mnt/backup
prefix="bkup_$(date +%Y%m%d_)"
for file in * .*; do
[[ -f $file ]] || continue # skip things like directories and soft links
if [[ $file == $prefix* ]]; then
echo "Copying " $file "to S3://auto-backup";
s3cmd put $file s3://auto-backup
fi
done < /tmp/file
Это сочетание двух вещей:
Программа должна наследовать DISPLAY
переменную среды, указанную в вашем crontab или в скрипте-оболочке, чтобы сообщить ей, где находится дисплей X-сервера, который вы хотите настроить. Ошибка сегментации, которую вы видите, является режимом отказа, если об этом не сказано.
Вы можете сообщить об этом как об ошибке.
У вас есть переменная DISPLAY
в окружении оболочки, которую вы используете, вероятно, потому, что вы используете эмулятор терминала с графическим интерфейсом. Если бы вы вошли в среду без графического интерфейса -, например, в виртуальный терминал ядра/пользователя, реальный терминал или сеанс SSH без переадресации X11, вы бы увидели такое же поведение и при интерактивном вызове программы..
% DISPLAY= sct zsh: segmentation fault DISPLAY= sct %