cat
выводит содержимое файла , т.е. блоки данных. Аналогично /bin/cat
.
Команда cat
была бы бесполезна, если бы она записывала байты структуры inode на терминал. Сравните inode_dump
и stat
.
Некоторые документы сообщают вам, что исторический unix позволял, например. /bin/cat
для чтения этих данных, и это был первоначальный способ вывода списка записей каталога из пользовательского пространства. т.е. ls
откроет каталог, read()
записи и интерпретирует их для вас. В отличие от использования readdir()
, где ядро предоставляет записи в стандартном формате, независимо от формата базовой файловой системы.
Основываясь на указаниях @Kusalananda в более простом вопросе, я придумал этот пример. Может быть, не самый простой...
Весь приведенный ниже код находится в интерактивной оболочке. Я просто разбил его на части для ответа, потому что иначе его было бы трудно читать.
Имейте в виду, что в bash
версии 4.1 и старше !
в ""
вызывает подстановку истории в интерактивной оболочке (это было исправлено в версии 4.2 ). Это то, чем меня обманули. Если вы действительно хотите процитировать $!
, вы можете использовать "$! "
, а завершающий пробел предотвратит подстановку истории.
unset to_wait;
date;
sleep 3 &
for i in 1 2 3; do
sleep 1 &
# Don't put the ! in "" or you'll get an `event`.
to_wait+=( $! );
done;
wait "${to_wait[@]}";
date;
echo waited 1s for inner processes;
# wait for the rest of the processes (just for illustration)
wait;
date;
echo waited 3s for outer process;
Вы можете запустить подоболочку:
{ sleep 20 && echo second output ; }
( sleep 2 & wait && echo first output )
Команда wait
в подоболочке будет действительна только там.