Ошибка с использованием команды exec в sind

Возможно, вам не следует использовать 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.

2
09.09.2019, 00:04
2 ответа

Кажется, вы хотите обрезать почтовые ящики для всех пользователей. Вы не можете сделать это, вызвав :из 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

В обоих этих вариантах утилита :вызывается правильно, и перенаправление будет происходить для каждого найденного имени пути (любого обычного файла в указанном пути поиска или ниже него ).

Похожие:

3
27.01.2020, 21:51

Какой смысл использовать здесь регулярное выражение? Почему бы просто не использовать 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 в соответствии с требованиями, с правильными владельцами и разрешениями.

4
27.01.2020, 21:51

Теги

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