Se cierran al terminar. El shell creará 3 descriptores de archivo 0,1,2 para cada comando que ejecute. Estos son solo números, los números se reutilizan. El shell cerrará los archivos antes de re -usando los descriptores.
Los descriptores de archivo también se pasan a otros procesos. Y si tiene un proceso en segundo plano, seguirá teniendo descriptores de archivo.
El ejemplo utiliza 3>&1
, lo que significa que el descriptor de archivo 3 hace referencia al archivo al que se refiere actualmente el descriptor 1.
Вы должны использовать команду head
, подключив find
таким образом:find /foo/*/searched_folder/bar -maxdepth 0 -type d | head -n 1
. Это даст вам только первый результат.
Чтобы найти все имена, соответствующие шаблону /projekte/*/3140/software/software.git/
, вы можете выполнить
set -- /projekte/*/3140/software/software.git/
Имена затем доступны в параметрах положения:
for gitdir do
printf 'Found directory %s\n' "$gitdir"
done
или просто
printf 'Found directory %s\n' "$@"
Это напечатает имена найденных каталогов. Если какое-либо имя является символической ссылкой на каталог, то эта символическая ссылка будет пройдена.
Если вам нужно присвоить их именованному массиву, например.bash
:
set -- /projekte/*/3140/software/software.git/
SORCE_ARRAY=( "$@" )
или просто
SORCE_ARRAY=( /projekte/*/3140/software/software.git/ )
Это предпочтительнее, чем расширение подстановки команд, поскольку подстановка команд не сохраняет пробелы в именах файлов.
Единственная проблема заключается в том, что шаблон не соответствует ничему , и в этом случае шаблон останется нераскрытым. Чтобы несоответствующий шаблон -не расширялся до нуля, используйте shopt -s nullglob
в оболочке bash
.