найдите причину повреждения файла при копировании файлов в сетевой ресурс на машине Ubuntu

Может быть более элегантный способ делать то, что вы хотите, но он работает:

do
    (cat /var/run/out& echo $! > cat_pid; wait) |
                            (nc -l 8080 <&0 & echo $! > nc_pid; wait) > >(
                ︙

(разбиты на отдельные строки после | для удобства чтения). Это работает путем упаковки каждой команды, PID которой вы хотите, в подоболочку, запускать его асинхронно в этой подоболочке, захватив его PID, а затем ждем завершения команды. (Это, по сути, возвращает команду на передний план.) Используйте прием Скотта чтобы асинхронный процесс в сценарии читал его законный стандартный ввод.

Но почему вы используете «кот» ? И почему вы используете >> (…) вместо простого трубопровода ?

Вы могли бы немного упростить это следующим образом:

while true
do
    (nc -l 8080 < /var/run/out & echo $! > nc_pid; wait) |
                while read line
                do
                    do some stuff
                done
done

позволяя nc читать прямо из / var / run / out , и использование простой трубы вместо замены процесса.

1
07.04.2015, 18:24
1 ответ

Я не уверен, что вы уже поняли это, но вы неправильно написали "strict sync" в вашем smb.conf (забыли 'c'). Кроме того, «синхронизировать всегда» не будет действовать, если строгая синхронизация не включена (чего не будет в этом случае из-за ошибки).

1
27.01.2020, 23:50

Теги

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