Вы не используете ;
с '& ', '&' самостоятельно достаточно для окончания команды. Я полагаю, что в настоящее время нет никакого упоминания об этом поведении в руководстве. Ваш цикл просто был бы:
for dir in $(ls); do command $dir & done
Кроме того, необходимо рассмотреть использование шарика вместо $(ls)
который перестанет работать, если имя файла будет содержать пробел. Можно установить nullglob
предотвратить dir
быть a *
при отсутствии файлов:
shopt -s nullglob
for dir in *; do command $dir & done
Это зависит от того, где находится ваш временный каталог. То есть создали ли вы свой собственный временный каталог или используете системный ( / tmp
)?
В вашем сценарии вы ожидаете, что файлы / папка останутся после того, как временный каталог будет очищен.
Если он находится в системном каталоге / tmp
, то он вполне может быть очищен системой (это зависит от дистрибутива, но у большинства из них есть задание cron
или подобное).
Кроме того, некоторые дистрибутивы создают свой каталог / tmp
, используя tmpfs
, что означает, что содержимое хранится в RAM / Swap и не выдерживает перезагрузки.
Файлы останутся доступными только в том случае, если вы создадите жесткую ссылку . Однако жесткие ссылки могут быть созданы только в пределах одной смонтированной файловой системы. Невозможно создать жесткую связь между tmpfs
/ tmp
и (например) файловой системой ext4
, смонтированной на / mystuff
.
Вы можете создать мягкую ссылку из / mystuff
куда-нибудь на tmpfs
, установленную в / tmp
, но когда временные файлы удаляются, ссылка будет указывать на «никуда»; который слегка поражает объект!
Если в вашем дистрибутиве есть файлы / tmp
на физическом диске, который находится на том же монтировании, что и место, где вы планируете хранить файлы ( / mystuff
), то жесткий диск ссылка будет работать, пока ссылка создается до того, как система очистит / tmp
.
Я привел пример для того, чтобы сделать вещи намного понятнее.
Внутри определенного каталога я создал 2 файла.
cat sourcefile
This is the sourcefile.
##This is to create a hard link.
ln sourcefile destfile
##List the files available.
ls
destfile sourcefile
cat destfile
This is the sourcefile.
Теперь, предполагая, что вы используете жесткие ссылки, как описано выше, чтобы ссылаться на ваши файлы внутри каталога /tmp
, давайте посмотрим, что произойдет, если я удалю исходный файл.
rm sourcefile
rm: remove regular file `sourcefile'? y
ls
destfile
cat destfile
This is the sourcefile
В вышеприведенном сценарии destfile
все еще доступен.
Теперь посмотрим, что произойдет, если мы используем софт-ссылки.
cat sourcefile
This is the sourcefile for softlink example.
ln -s sourcefile destfile
ls -l
total 4
lrwxrwxrwx 1 root root 10 Jun 26 13:40 destfile -> sourcefile
-rw-r--r-- 1 root root 46 Jun 26 13:40 sourcefile
Теперь, в соответствии с вашим сценарием, давайте удалим исходный файл и посмотрим, что произойдет.
rm sourcefile
rm: remove regular file `sourcefile'? y
ls
destfile
cat destfile
cat: destfile: No such file or directory
Итак, если вы используете мягкую ссылку, данных может не быть.
EDIT
Я использовал mktemp
для создания временного файла и создал жесткую ссылку из каталога /tmp
в одну из своих рабочих директорий.
Я перезагрузил машину, чтобы проверить, доступно ли содержимое после перезагрузки. Если я использую жесткие ссылки /tmp, то их содержимое будет доступно и после перезагрузки. Причина проверки заключается в том, что во время перезагрузки каталог /tmp
обычно удаляется.