Я не могу дать полное решение, потому что вообще не использую sudo. Вы должны экспортировать DISPLAY и XAUTHORITY перед запуском xclock от имени user1.
su -l user1 -c 'export DISPLAY=:0.0;XAUTHORITY=/home/user1/XAUTHORITY;xclock&'
Обратите внимание, что это ненадежное решение, поскольку DISPLAY и XAUTHORITY не всегда совпадают.
Я бы предложил комбинацию awk
для разделения и отдельный inotifywait
просмотр вашего каталога "исходящих данных". Например. создайте каталог с именем «исходящий», и всякий раз, когда появится новый файл, мы будем его отправлять.
Сценарий 1:Разбиение по awk
каждой 10-й строки и запись в новый файл "bufferX" с увеличением числа X -адаптируйте по мере необходимости.
$cat split.awk
NR%10==1 {buffer="buffer"++i}
{
print > buffer
if (NR%%10==0) {system("mv "buffer" outgoing/")}
}
Сценарий 2:Отслеживание исходящего каталога и отправка данных всякий раз, когда появляется новый пакет журнала. Я просто предположил, что вы используете curl
для отправки -.
$cat watch_dir.sh
#!/bin/bash
inotifywait -m -o watch.logs -e moved_to --format '%w%f' outgoing/ |\
while read bufferfile
do
curl -T ${bufferfile} http://taget.url && rm ${bufferfile}
done
Здесь inotifywait
наблюдает за "исходящим" каталогом в поисках -e
сброса файла moved_to
он работает неопределенно долго с -m
режимом onitor, l -o
gs в "watch.logs" и печатает обнаруженный файл в --format
с указанием пути и имени файла. Эту последнюю часть мы читаем для команды curl
и удаляем файл после загрузки.
Создайте исходящий каталог, затем запустите:
bash watchdir.sh & <your_command_creating_output> | awk -f split.awk