Я пытаюсь понять, как именно работает перенаправление.эта команда
# tar -czf - ./Downloads/ | (pv -p --timer --rate --bytes > backup.tgz)
Каков перевод на английский?
Все данные tar
перенаправляются как входные данные в , pv
а затем pv
перенаправляют их в backup.tgz
?
Тогда зачем нужна скобка вокруг pv
?
Тогда какой смысл в этом перенаправлении?
tar -czf - ./Documents/ | (pv -n > backup.tgz) 2>&1 | dialog --gauge "Progress" 10 70
После pv
чего в чем смысл 2>&1
?
решение1
ВидетьКаковы операторы управления и перенаправления оболочки?иПорядок перенаправленийдля фона.
tar -czf - ./Downloads/ | (pv -p --timer --rate --bytes > backup.tgz)
указывает оболочке работать tar -czf - ./Downloads/
со стандартным выводом, перенаправленным в (pv -p --timer --rate --bytes > backup.tgz)
.
(pv -p --timer --rate --bytes > backup.tgz)
сообщает оболочке о необходимости запуска pv -p --timer --rate --bytes
со стандартным вводом, подключенным к каналу из tar
, и стандартным выводом, перенаправленным в backup.tgz
. Общий эффект, поскольку tar
сообщается о создании сжатого архива, выводимого на его стандартный вывод ( f -
), заключается в создании сжатого архива, его передаче через pv
, а затем pv
записи в backup.tgz
. pv
отображает индикатор выполнения, обновляемый по мере прохождения данных через него.
Скобки не обязательны.
Вторая команда изменяет вторую половину первой трубы:
(pv -n > backup.tgz) 2>&1
снова записывает в backup.tgz
, но также перенаправляет стандартную ошибку подоболочки (введенную скобками) на стандартный вывод и передаетчтов dialog
который выводится собственный индикатор прогресса.
Скобки здесь необходимы, если перенаправления установлены в порядке, указанном в вашей команде: pv -n > backup.tgz 2>&1
перенаправит и pv
стандартный вывод , и стандартную ошибку в backup.tgz
, что не то, что вам нужно. Желаемого эффекта можно также достичь, перенаправив сначала стандартную ошибку: pv -n 2>&1 > backup.tgz
.