LINUX.ORG.RU

Фильтр в скрипте

 bash pipe


0

1

Может из faq, но задам вопрос: как бы управлять порядком запуска процесов?

Чтобы не ломался: (sleep не хочу и не поможет, как и temp file)

#!/bin/bash
filesize()
{
  /bin/ls -l "$1" | cut -d " " -f 5
}
filter()
{
  cat
}
T=/tmp/ztest.tmp
while [ 1 = 1 ]; do

echo >$T; cat <$T | filter | sh -c "cat >$T"

n=`filesize $T`
echo "$T:$n"
[ "$n" = "0" ] && exit 123
done

wait, signal какой-нибудь?

1 Вопрос то; если я открыл файл на чтение и ктото позже удалил |начал писать в него, то что я получаю на чтение: cтарую копию или уже измененые данные? Зависит от filesystem?



Последнее исправление: kdev (всего исправлений: 5)

Может из faq, но задам вопрос: как бы управлять порядком запуска процесов?

вопрос непонятен. Код — тем более. Чего ты хочешь-то?

запускай их так, как тебе надо. Может здесь стоит почитать:

Coprocesses A coprocess is a shell command preceded by the coproc reserved word. A coprocess is executed asynchronously in a subshell, as if the command had been terminated with the & control operator, with a two-way pipe established between the executing shell and the copro- cess.

(man bash)

drBatty ★★
()

echo >$T; cat <$T | filter | sh -c «cat >$T»

вот какой смысл имеет ЭТА НЁХ?? Если ты про функцию filter, то оно работает как надо. Пруф

#!/bin/bash

filtr() {
·   sed 's/./\u&/g'
}

echo "abc" | filtr | cat
drBatty ★★
()

если я открыл файл на чтение и ктото позже удалил

До тех пор, пока дескриптор открыт, inode существует и его можно читать/писать. По закрытию всех дескрипторов inode удаляется полностью.

начал писать в него, то что я получаю на чтение

Содержимое области на НЖМД. Зависит от того, сбросил процесс-писатель свой буфер на носитель или нет.

Алсо, man stat.

schizoid ★★★
()

И не совсем понятно, в чём задача. Named pipes не подойдут?

schizoid ★★★
()

если я открыл файл на чтение и кто-то позже удалил | начал писать в него, то что я получаю на чтение: cтарую копию или уже измененые данные?

1. Открыл на чтение и удалил имя файла — продолжаешь читать этот (старый файл)
2. После удаления, кто-то создал файл и стал писать в него — это уже совершенно новый файл и на чтение из п.1 никак не повлияет.

anonymous
()
Ответ на: комментарий от schizoid

До тех пор, пока дескриптор открыт, inode существует и его можно читать/писать. По закрытию всех дескрипторов inode удаляется полностью.

ты всё перепутал. В ext4 inode существует всегда.

inode связан с именем файла, до тех пор, пока ты не отвяжешь все имена файлов от inode

inode связан также со всеми своими дескрипторами, пока ты не уничтожишь все эти дескрипторы.

Файл считается мусором и удаляется, тогда, и только тогда, когда с его inode не связано ни одно имя, и ни один дескриптор.

начал писать в него, то что я получаю на чтение

Содержимое области на НЖМД.

неправильно. Содержимое памяти для чтения может никак не относится к носителю. Многие файлы вообще никогда не достигают носителя. В частности fifo файлы, о которых, как я понимаю, и идёт речь. Pipe являются безыменными fifo, и на носитель тоже не пишутся.

drBatty ★★
()

1 Вопрос то; если я открыл файл на чтение и ктото позже удалил |начал писать в него, то что я получаю на чтение: cтарую копию или уже измененые данные? Зависит от filesystem?

если ты открыл, кто-то удалил имя, то ты будешь продолжать читать старый файл, даже если его имя изменилось или вообще удалено. На открытый файл это никак не влияет.

если кто-то туда стал писать что-то, то зависит от того, КАК пишут. Если пишут/добавляют «как обычно», то будешь читать то, что пишут, но с задержкой, равной размеру буфера, если пишущий не синхронизирует этот файл каждый раз, или если он открыл его с O_SYNC. Но так обычно добавляют.

Если файл «правят», то его удаляют, и _одновременно_ меняют новой копией. Новая копия готовится отдельно, во временном файле.

drBatty ★★
()
Ответ на: комментарий от drBatty

ты всё перепутал.

А ты недопонял. Я говорил об отвязанном иноде, на который ещё открыт дескриптор.

неправильно.

Очевидно, что это частный случай. ТСу такие подробности пока и не нужны.

schizoid ★★★
()
Ответ на: комментарий от schizoid

А ты недопонял. Я говорил об отвязанном иноде, на который ещё открыт дескриптор.

да всё я допонял. Просто не нужно путать ТСа. Ты вроде всё правильно понимаешь, но я уверен, что прочитав твоё объяснение, ТС поймёт его неправильно.

ТСу такие подробности пока и не нужны.

лучше уж подробно изложить ситуацию, что-бы ТС смог найти в ней свой частный случай. Потому-что судя по его коду, в голове у него полная каша.

drBatty ★★
()

Tak кажется работает:

echo >$T; (rm -f $T;cat) <$T | filter | sh -c «while [ -r $T ]; do continue; done; cat >$T»

kdev
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.