Возможно, вам не следует использовать sudo для всего этого; все вещи находятся в вашем собственном каталоге.
Суть вашего вопроса в том, что ваш скрипт не знает, где отображать окно. Попробуйте добавить
echo "DISPLAY=$DISPLAY" >> logfile.data
Вероятно, вы увидите
DISPLAY=
в `logfile.data. Кроме того, если вы используете:
/usr/bin/python3 prodmain.py >> logfile.data 2>/tmp/errorfile
вы, вероятно, увидите /tmp/errorfile
с чем-то вроде:
prodmain: Xt error: Can't open display:
prodmain: DISPLAY is not set
Вот почему он не отображается при загрузке.
Теперь, как это решить :, это во многом зависит от того, что вы хотите. Вы можете запустить программу из ~/.xinitrc
при входе -в графическую среду. Вы можете разделить задание на две части :, выполняя git
и cp
при загрузке, и prodmain
из .xinitrc
.
Кажется, вы хотите обрезать почтовые ящики для всех пользователей. Вы не можете сделать это, вызвав :
из find
, так как :
не является внешней утилитой (, это оболочка, встроенная -в утилиту ). Использование true
вместо :
сработало бы, так как это обычно доступно как внешняя команда, но...
Вы также не можете использовать перенаправление в команде, выполняемой через -exec
, так как это перенаправление будет задействовано оболочкой во время первого запуска утилиты find
(не один раз для каждого найденного файла ).
Ваша команда практически такая же, как
find /var/spool/mail/ -regextype sed -regex "^.*[^/]$" -exec : \; >{}
т. е. будет создан файл с именем {}
, в который перенаправляется стандартный поток вывода find
.
Вместо этого вы можете сделать что-то вроде
find /var/spool/mail -type f -exec sh -c '
for pathname do
: >"$pathname"
done' sh {} +
Как «один -лайнер»:
find /var/spool/mail -type f -exec sh -c 'for pathname do : >"$pathname"; done' sh {} +
Или, если все почтовые ящики находятся непосредственно под /var/spool/mail
,
for pathname in /var/spool/mail/*; do
: >"$pathname"
done
Как «один -лайнер»:
for pathname in /var/spool/mail/*; do : >"$pathname"; done
В обоих этих вариантах утилита :
вызывается правильно, и перенаправление будет происходить для каждого найденного имени пути (любого обычного файла в указанном пути поиска или ниже него ).
Похожие:
Какой смысл использовать здесь регулярное выражение? Почему бы просто не использовать find /var/spool/mail/ -type f
? и используйте -maxdepth 1
, если вы хотите предотвратить рекурсию в какие-либо подкаталоги -.
Кроме того, зачем усекать почтовые ящики пользователей, если их можно просто удалить? например.
find /var/spool/mail/ -type f -delete
или
find /var/spool/mail/ -type f -exec rm {} +
Когда для пользователя поступает новая почта, MTA или MDA создают файлы mbox в соответствии с требованиями, с правильными владельцами и разрешениями.