Одно из преимуществ разрешения оболочке выполнять open ()
, например:
utility <in >out
, в отличие от разрешения именованной утилите выполнять open ()
, например:
utility in >out
..., заключается в том, что файловый дескриптор защищен до вызова именованной утилиты, или в противном случае при возникновении ошибки во время open ()
утилита никогда не вызывается Это лучший способ оградить себя от побочных эффектов возможных расовых условий - как это время от времени бывает при работе с потоками и редактором потоков .
Если перенаправление завершается неуспешно, оболочка приводит к короткому замыканию вызова утилиты и записывает сообщение об ошибке в stderr - stderr оболочки , а не все, на что вы могли временно направить его для утилиты (что также зависит от порядка перенаправлений в командной строке) - в стандартном диагностическом формате. Самый простой способ проверить, можно ли открыть файл, это открыть его, и <
делает это неявно перед чем-либо другим.
Возможно, наиболее очевидным условием гонки, указанным в командах в вашем вопросе, является перенаправление out . В обеих формах оболочка также открывает >
запись, и это происходит независимо от того, может ли sed
успешно открыть файл readfile во второй форме. Так что out усекается - и, возможно, без необходимости. Это может быть плохо, если вы хотите записать выходные данные, только если вы можете успешно открыть входные данные. Однако это не проблема, если вы всегда открываете свой ввод первым, как это делается в первой форме.
В противном случае существуют по крайней мере 10 числовые дескрипторы файлов, которыми можно манипулировать с синтаксисом перенаправления оболочки таким образом, и эти комбинации могут стать довольно волосатыми.
Кроме того, когда оболочка открывает, дескриптор принадлежит не вызываемой команде - как это делается со второй версией - а оболочке, и вызываемая команда наследует только ее. Он наследует так же, как любые другие команды, вызываемые в той же самой составной команде, и поэтому команды могут совместно использовать ввод таким образом.
-121--120132-Попробуйте.
DAY30=`TZ=EST+720 date "+%Y-%m-%d"`
print $DAY30
720 - смещение в часах. Итак, 30 дней - это 720 часа.
EST - мой часовой пояс. Я предполагаю, что вы можете использовать любой подходящий часовой пояс.
-121--73551-Вы можете удалить параметры ip (BOOTPROTO,...) из ifcfg-team0, поскольку они теперь определены в ifcfg-brteam0.
ifcfg-team0 может быть короче
DEVICE = team0
TEAM_CONFIG="{\"runner\": {\" имя\" :\" activebackup\"}} "
DEVICETYPE=Team
NAME=team0
UUID=75299245-c21f-4bfc-8c21-1728378d5a33
ONBOOT=yes
BRIDGE=brteam0
В ifcfg-brteam0 необходимо изменить значение DEVICE, например:
DEVICE = brteam0
вместо team0 в OP значение, уже используемое ifcfg-team0.
Во-первых, это ужасная идея. IgnorePkg
предполагается, что это временная мера, поскольку она, по сути, вызывает частичные обновления , а не то, что является вашим де-факто подходом к управлению пакетами для непрерывного выпуска.
Сказав это, было бы относительно просто создать функцию для достижения вашей цели.
fullupgrade() { pacman -Syu $(awk -F= '/^IgnorePkg/ {print $NF}' /etc/pacman.conf) ; }