Если вы хотите использовать find
, вы должны добавить флаг -mindepth 1
, чтобы уровень ниже ваших исходных каталогов был обнаружен первым.
Однако вы также можете использовать несколько разных инструментов, например ls -d * /
, чтобы распечатать имена каталогов.
Значения exec
с командой и без нее не связаны. Я предполагаю, что встроенное имя перегружено, потому что одно значение не имеет смысла с командой, а другое не имеет смысла без команды, поэтому, делая это таким образом, вы избавляетесь от необходимости изобретать новое имя, которое затем не будет использоваться для другого команда.
Если команда опущена, но указаны любые перенаправления, то перенаправления вступят в силу в текущей оболочке.
Это означает, что что-то вроде exec 3> / tmp / foo
изменяет то, на что указывает файловый дескриптор 3 в запущенном процессе оболочки. Фрагмент оболочки, например / bin / somecommand 3> / tmp / foo
, означает следующее:
/ tmp / foo
для записи в файловый дескриптор 3 в подпроцессе. / bin / somecommand
в подпроцессе. exec 3> / tmp / foo
просто выполняет шаг 3, он ничего не делает с процессами.
После exec 3> / tmp / foo
все последующие обращения к файловому дескриптору 3 из оболочки и его подпроцессов идут к / tmp / foo
, как и при любом другом перенаправлении. Например, предположим, что вы запускаете следующий сценарий в терминале, ничего не связанного с файловым дескриптором 3:
echo hello # prints to the terminal
echo nope >&3 # complains about a bad descriptor since no file is open on fd 3
exec >/tmp/out 3>/tmp/three
echo hello # writes to /tmp/out
echo howdy >&3 # writes to /tmp/three
echo wibble >&3 # writes a second line to /tmp/three