Код: Выделить всё
#!/bin/bash
{
echo "block 1, fd=3"
fuser -v testfile
} 3<>testfile
echo "exited block 1"
fuser -v testfile
{
echo "block 2, fd=$fd"
fuser -v testfile
} {fd}<>testfile
echo "exited block 2"
fuser -v testfile
Shell
% ./test.sh
block 1, fd=3
ПОЛЬЗ-ЛЬ PID ДОСТУП КОМАНДА
/tmp/testfile:
user 8826 F.... test.sh
exited block 1
block 2, fd=10
ПОЛЬЗ-ЛЬ PID ДОСТУП КОМАНДА
/tmp/testfile:
user 8826 F.... test.sh
exited block 2
ПОЛЬЗ-ЛЬ PID ДОСТУП КОМАНДА
/tmp/testfile:
user 8826 F.... test.sh
%
Shell
% ksh93 test.sh
block 1, fd=3
ПОЛЬЗ-ЛЬ PID ДОСТУП КОМАНДА
/tmp/testfile:
user 9292 F.... ksh93
exited block 1
block 2, fd=11
ПОЛЬЗ-ЛЬ PID ДОСТУП КОМАНДА
/tmp/testfile:
user 9292 F.... ksh93
exited block 2
%
А как ведёт себя этот код в вашей системе, и какая у вас версия bash?
Shell
% bash --version
GNU bash, версия 5.0.3(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2019 Free Software Foundation, Inc.
Лицензия GPLv3+: GNU GPL версии 3 или более поздней <http://gnu.org/licenses/gpl.html>
Это свободное программное обеспечение. Вы можете изменять и распространять его.
НИКАКАЯ ГАРАНТИЯ не предоставляется в пределах, допускаемых законом.
%