можно использовать , в то время как
цикл:
while IFS= read -r _file
do
cp "$_file" ~/Desktop/temp
done < "files.txt"
IFS
установлен в нулевое значение, что не приводит к расщеплению, а -r
говорит о том, что бэш экранирует символ обратного слеша.
Я нашел решение с помощью mkfifo
, который создает именованную трубу, или FIFO.
Проще всего создать символическую ссылку, и можно использовать все перенаправления, разрешенные оболочкой.
mkfifo MyOutput
ls -l
дает
0 prw-r--r-- 1 My_username My_username 0 May 11 17:45 MyOut|
Я могу запустить программу с перенаправлением на эту ссылку
./Execute_program > MyOutput & cat MyOutput
и вывод начинает идти на терминал.
Если я нажимаю ctrl+c, я прерываю поток, но не запущенный процесс (для этого мне нужно использовать что-то вроде kill pid
или kill %1
).
Когда во второй раз я попрошу FIFOs сделать дамп на терминал (снова с cat MyOutput
), он начнет делать дамп вывода с этого момента.
Примечания и предупреждения:
FIFOs
, он будет держать весь вывод. cat MyOutput >> NewRealFile
cat MyOutput
и из другого терминала! FIFO
, поток будет слит (нет априорного способа отличить, из какой программы пришла эта строка). то для мониторинга вы можете сделать что-то вроде:
Вы можете использовать реальные файлы вместо Fifosзатем tail -f они будут заменены при повторном запуске скриптов.
Я предпочитаю второй метод, или просто использование мультиплексора (т.е. экрана или того, что когда-либо популярная реинкарнация на этой неделе)#!/bin/bash
while [ 1 ]
do
rsync -avz --partial source dest
if [ "$?" = "0" ] ; then
echo "rsync completed normally"
exit
else
echo "Rsync failure. Backing off and retrying..."
sleep 180
fi
done
затем
awk '{while(match($0,"[$]{[^}]*}")) {var=substr($0,RSTART+2,RLENGTH -3);gsub("[$]{"var"}",ENVIRON[var])}}1' < input.txt > output.txt
для "мониторинга" и ctrl+a d для отладки.
Убедитесь, что в конце вашего скрипта есть пауза, если вы хотите увидеть результат после его запуска. [119337]
если бы я был вашим идентификатором, просто перенаправьте вывод в файл, а затем завершите этот файл, когда я хочу увидеть вывод ... также вы можете ограничить размер этого файла если вы думаете, что вывод будет довольно длинным, или файл будет записан в оперативной памяти, а не на диске, если вы думаете, что вывод будет довольно быстрым, но как это сделать, это еще один вопрос.