Вы упустили самый важный момент, перенаправление оболочки применяется по порядку слева направо.
В:
{ 2>&3 "$@"& } 3>&2 2>/dev/null
Вся групповая команда запускается с:
Таким образом, при выполнении команды внутри группировки:
Таким образом, если "$@"&
выводит что-либо со стандартной ошибкой, вывод выводится на терминал.
Для ваших конкретных случаев:
{ grep warning system.log& } 2>/dev/null
{ grep warning system.log& }
работает со стандартной ошибкой, указывает на /dev/null
. grep
не отменяет никакого перенаправления, поэтому его стандартная ошибка аналогична {...}
и перенаправляется на /dev/null
, вы не получаете вывода на терминал.
В:
{ 2>&3 grep warning system.log& } 3>&2 2>/dev/null
Стандартная ошибкаgrep
перенаправляется на дескриптор файла 3, который указывает на терминал, как описано выше, поэтому вы получаете вывод на терминал.
lsblk
даст вам номера MAJ :MIN
Чтобы вычислить эквивалент для ras-mc-ctl
, выполните:
d = (MAJ * 256) + MIN
Чтобы перейти от ras-mc-ctl
к lsblk
, выполните:
MAJ=int(d/256)
MIN=d % 256
Для вашего случая:
MAJ=(2064/256)=8
MIN=(2064%256)=16