`ожидание` процессов, запущенных в цикле for, но не запущенных ранее

catвыводит содержимое файла , т.е. блоки данных. Аналогично /bin/cat.

Команда catбыла бы бесполезна, если бы она записывала байты структуры inode на терминал. Сравните inode_dumpи stat.

Некоторые документы сообщают вам, что исторический unix позволял, например. /bin/catдля чтения этих данных, и это был первоначальный способ вывода списка записей каталога из пользовательского пространства. т.е. lsоткроет каталог, read()записи и интерпретирует их для вас. В отличие от использования readdir(), где ядро ​​предоставляет записи в стандартном формате, независимо от формата базовой файловой системы.

0
28.11.2019, 13:31
2 ответа

Основываясь на указаниях @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;
0
28.01.2020, 02:38

Вы можете запустить подоболочку:

{ sleep 20 && echo second output ; }
( sleep 2 & wait && echo first output ) 

Команда waitв подоболочке будет действительна только там.

1
28.01.2020, 02:38

Теги

Похожие вопросы